php安全之字符转换

来源:互联网 发布:n卡驱动优化守望先锋 编辑:程序博客网 时间:2024/06/10 01:27

今天在看<<Pro Php Security>>这本书的时候,有一部分是专门讲用户输入验证与净化(sanitize)这一内容的。

当用户输入的时候,有好几类字符得转换,最基本的是addslashes这样的转换

还有几点要考虑

(1)当用户输入要显示的内容时,可能有html或者javascript代码,对这样的代码转换比较简单

 

$string = str_replace(array("%3C",'<'), '&lt;', $string);

$string = str_replace(array("%3E",'>'), '&gt;', $string);

最让我好奇的是%3C %3E是什么东西?
%3C齐实就是'<'的url编码值.
%3E齐实就是'>'的url编码值.
具体的编码对照参见 编码详细说明

CharacterCode
Points
(Hex)Code
Points
(Dec)Why encode?Space2032Significant sequences of spaces may be lost in some uses (especially multiple spaces)Quotation marks
'Less Than' symbol ("<")
'Greater Than' symbol (">")22
3C
3E34
60
62These characters are often used to delimit URLs in plain text.'Pound' character ("#")2335This is used in URLs to indicate where a fragment identifier (bookmarks/anchors in HTML) begins.Percent character ("%")2537This is used to URL encode/escape other characters, so it should itself also be encoded.Misc. characters:
   Left Curly Brace ("{")
   Right Curly Brace ("}")
   Vertical Bar/Pipe ("|")
   Backslash ("/")
   Caret ("^")
   Tilde ("~")
   Left Square Bracket ("[")
   Right Square Bracket ("]")
   Grave Accent ("`")
7B
7D
7C
5C
5E
7E
5B
5D
60
123
125
124
92
94
126
91
93
96Some systems can possibly modify these characters.

(2)在xml文件中不允许出现的非法字符
这类字符最好进行替换
Char::=#x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]/*any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */
这此字符是允许出现在xml文档中的,不在此之内的字符是不允许出现在xml文档之中的
具体xml字符规范
$string = preg_replace(array('/[//x00-//x08//x0B//x0C//x0E-//x1F]/','/&(?!(#[0-9]+|[a-z]+);)/is'), array('', '&amp;'), $string);
用这种方式可以把这些字符转换或者替代
(3)有些字符串是不能出现单引号和双引号,可以把这些字符转义
$string = str_replace(array('"',"'","/t",'  '), array('&quot;','&#39;','    ','&nbsp;&nbsp;'), $string);
把如上这些字符进行转换后,输出的时候就不会有错误,并且相对安全了很多

 

Locations of visitors to this page

统计

原创粉丝点击