您的位置:首页 > 编程语言 > PHP开发

php安全之字符转换

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

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

还有几点要考虑

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

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

$string = str_replace(array("%3E",'>'), '>', $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
3E
34
60
62
These 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
96
Some 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('', '&'), $string);

用这种方式可以把这些字符转换或者替代
(3)有些字符串是不能出现单引号和双引号,可以把这些字符转义

$string = str_replace(array('"',"'","/t",' '), array('"',''',' ','  '), $string);
把如上这些字符进行转换后,输出的时候就不会有错误,并且相对安全了很多



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: