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编码值.
具体的编码对照参见 编码详细说明
(2)在xml文件中不允许出现的非法字符
这类字符最好进行替换
如
这此字符是允许出现在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);
把如上这些字符进行转换后,输出的时候就不会有错误,并且相对安全了很多
![](http://www2.clustrmaps.com/counter/index2.php?url=http://blog.csdn.com/robertaqi)
当用户输入的时候,有好几类字符得转换,最基本的是addslashes这样的转换
还有几点要考虑
(1)当用户输入要显示的内容时,可能有html或者javascript代码,对这样的代码转换比较简单
$string = str_replace(array("%3C",'<'), '<', $string);
$string = str_replace(array("%3E",'>'), '>', $string);
最让我好奇的是%3C %3E是什么东西?
%3C齐实就是'<'的url编码值.
%3E齐实就是'>'的url编码值.
具体的编码对照参见 编码详细说明
Character | Code Points (Hex) | Code Points (Dec) | Why encode? |
---|---|---|---|
Space | 20 | 32 | Significant 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 ("#") | 23 | 35 | This is used in URLs to indicate where a fragment identifier (bookmarks/anchors in HTML) begins. |
Percent character ("%") | 25 | 37 | This 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. |
这类字符最好进行替换
如
Char | ::= | #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] | /* | any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */ |
具体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);
把如上这些字符进行转换后,输出的时候就不会有错误,并且相对安全了很多
![](http://img.tongji.linezing.com/2142105/tongji.gif)
相关文章推荐
- php 字符安全转码为UTF-8 的函数,转换前做判断
- php转义字符窜(将字符窜转换成html实体)
- PHP实现gb2312、UTF-8等字符和unicode间的编码转换及PHP版unescape
- PHP数据类型转换(字符转数字,数字转字符)
- PHP中文字符gbk编码与UTF-8编码的转换
- PHP把HTML内容清除或转换成字符输出
- php 限制标题长度,将一个中文转换成一个字符
- PHP 判断字符类型,并转换返回
- PHP数据类型转换(字符转数字,数字转字符)
- 安全的宽字符与ANSI字符之间的相互转换
- PHP 过滤 及 字符转换 函数
- PHP数据类型转换(字符转数字,数字转字符)
- PHP数据类型转换(字符转数字,数字转字符)
- PHP - ASCII码与字符之间的转换
- PHP数据类型转换(字符转数字,数字转字符)
- PHP数据类型转换(字符转数字,数字转字符)
- 苹果推送表情(php字符转换)
- PHP一些常用的正则表达式字符的一些转换
- PHP如何将字符首字母大小写转换