Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP非字符串URL/HTML安全性 问题_Php_Html_Url_Types_Escaping - Fatal编程技术网

PHP非字符串URL/HTML安全性 问题

PHP非字符串URL/HTML安全性 问题,php,html,url,types,escaping,Php,Html,Url,Types,Escaping,是否有任何其他不安全的情况下打印到HTML页面或URL而不转义?忽略具有自定义toString方法的对象 出身背景 我正在编写一个内部库来神奇地清理任何简单的字符串、int、float等、数组、嵌套数组、对象等等。。。将数据的目的地指定给HTML页面或URL 对于字符串,很明显我必须应用和/或某些字符串 如果可能的话,我想保留变量的类型,因此如果可能的话,我不想转换int、float等 示例代码 下面是我的部分类的当前状态。请注意,下面的代码还没有说明对象函数和属性 似乎没有人有这方面的经验,或

是否有任何其他不安全的情况下打印到HTML页面或URL而不转义?忽略具有自定义toString方法的对象

出身背景 我正在编写一个内部库来神奇地清理任何简单的字符串、int、float等、数组、嵌套数组、对象等等。。。将数据的目的地指定给HTML页面或URL

对于字符串,很明显我必须应用和/或某些字符串

如果可能的话,我想保留变量的类型,因此如果可能的话,我不想转换int、float等

示例代码 下面是我的部分类的当前状态。请注意,下面的代码还没有说明对象函数和属性


似乎没有人有这方面的经验,或者我使用的搜索词不正确,所以我决定做一些研究

是的,在一些情况下。 <>当输出变量消毒时应考虑的情况:

嵌套数组元素 对象函数和属性 URL中的资源不安全 特定上下文的安全字符 返回一个字符串,其中除-\之外的所有非字母数字字符均为该字符串。已被替换

安全字符:0-9a-za-Z-30;

执行的翻译是:

“&”符号变为“&” 未设置ENT\u NOQUOTES时,“”双引号变为“”。 “单引号变为”或&apos;仅当设置了ENT_引号时。 大于变成'>' 不安全字符:&'<>

非字符串变量类型 可能的字符:1

可能的字符:0-9-

可能的字符:0-9-

输出源:构造函数、\uuuuToString、其他函数、属性,每个都必须检查

似乎不需要打印资源,但为了完整起见,这里提供了一些信息

输出:资源ID[0-9]在URL中不安全

输出:

class HogwartsExpress {
    private static $URL = 0;
    private static $HTML = 1;

    // ...

    private static function escape_array($arr, $method){
        $escaped_arr = array();
        foreach ($arr as $k=>$v){
            $safe_k = self::escape_non_array($k, $method);
            $escaped_arr[$safe_k] = is_array($v) ? self::escape_array($v, $method): self::escape_non_array($v, $method);
        }
        return $escaped_arr;
    }

    private static function escape_non_array($val, $method){
        if (is_string($val)){
            switch ($method){
                case self::$URL:  return urlencode($val);
                case self::$HTML: return htmlspecialchars($val);
            }
        }
        else {
            return $val;
        }
    }
}
// boolean (TRUE|FALSE)
echo TRUE;  //1
echo FALSE; //
// decimal non-zero /[+-]?[1-9][0-9]*/
echo 1;       //1
echo 83;      //83
echo -7;      //-7
echo +30;     //30

// decimal zero     /[+-]0/
echo 0;       //0
echo +0;      //0
echo -0;      //0

// hexadecimal      /[+-]?0[xX][0-9a-fA-F]+/
echo 0x0;     //0
echo -0x0;    //0
echo 0x0A;    //10
echo -0X13;   //-19
echo +0x22;   //34

// octal            /[+-]?0[0-7]+/
echo 00;      //0
echo -00;     //0
echo +00;     //0
echo 07;      //7
echo 09;      //0
echo -02;     //-2
echo 020;     //16
echo +015;    //13

// binary           /[+-]?0b[01]/
echo 0b0;     //0
echo +0b0;    //0
echo -0b0;    //0
echo 0b111;   //7
echo -0b101;  //-5
echo +0b1101; //13
// Float /[+-]?({REQ}|(({OPT}\.{REQ})|({REQ}\.{OPT})))[eE][+-]?{REQ}/
// OPT   /[0-9]*/
// REQ   /[0-9]+/
echo .53;   //0.53
echo 42;    //42
echo 64.;   //64
echo 25.11; //25.11
echo -5.2;  //-5.2
echo +8.8;  //8.8
echo -3.2E1 //-32
echo +2.e-2 //0.02
echo array('a' => 3.2, 'b' => 5); //Array
$foo = array('bar' => '<');
echo $foo['bar'];                 //<
class Foo {}
echo new Foo(); //{error}

class Bird {
    function __construct() { $this->beak_len = 3.5; echo 'hoot'; }
    function __toString(){ return 'hedwig'; }
    function tweet(){ echo 'HOOT'; }
}
$owl = new Bird();   //hoot
echo $owl;           //hedwig
$owl->tweet();       //HOOT
echo $owl->beak_len; //3.5
$doc = xml_parser_create();
echo $doc;                  //Resource id #4
$tmp = tmpfile();
echo $tmp;                  //Resource id #4
// NULL
echo NULL; // {null}