php内置过滤函数总结
PHP本身内置了很多参数过滤的函数,以方便开发者简单有效且统一地进行安全防护,而这些函数可以分为多种类型,如SQL注入过滤函数,XSS过滤函数,命令执行过滤函数,代码执行过滤函数等等。
SQL注入过滤函数
SQL注入过滤函数有addslashes(),mysql_real_escape_string()以及mysql_escape_string(),它们的作用都是给字符串添加反斜杠(\)来转义掉单引号(’)、双引号(”)以及空格符NULL。
addslashes()和mysql_escape_string()函数都是直接在敏感字符串前加反斜杠,可能会存在宽字节注入。可参考我之前的博客
而mysql_real_escape_string()函数会考虑当前连接数据库的字符集编码。
addslashes()
addslashes() 函数返回在预定义字符之前添加反斜杠的字符串。
预定义字符是:
- 单引号(’)
- 双引号(”)
- 反斜杠(\)
- NULL
1 | addslashes(string) |
参数 | 描述 |
---|---|
string | 必需。规定要转义的字符串。 |
1 | <?php |
mysql_escape_string()
在PHP5.3中已经弃用mysql_escape_string()
1 | mysql_escape_string()并不转义%和_ |
1 | <?php |
mysql_real_escape_string()
mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。
下列字符受影响:
- \x00
- \n
- \r
- \
- ‘
- “
- \x1a
如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。
1 | mysql_real_escape_string(string,connection) |
参数 | 描述 |
---|---|
string | 必需。规定要转义的字符串。 |
connection | 可选。规定 MySQL 连接。如果未规定,则使用上一个连接。 |
1 | <?php |
XSS过滤函数
XSS过滤函数有htmlspecialchars()和strip_tags()
htmlspecialchars()
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
预定义的字符是:
1 | &转换成& |
1 | <?php |
strip_tag()函数
strip_tags() 函数剥去字符串中的 HTML、XML 以及 PHP 的标签。
1 | strip_tags(string,allow) |
参数 | 描述 |
---|---|
string | 必需。规定要检查的字符串。 |
allow | 可选。规定允许的标签。这些标签不会被删除。 |
1 | <?php |
命令执行过滤函数
PHP提供了escapeshellcmd()和escapeshellarg()两个函数对参数进行过滤
escapeshellcmd()
在Windows下过滤方式是在字符前面加上一个^符号
在Linux是在字符前加上反斜杠(\)
过滤字符如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22&
;
`
|
*
?
~
<
>
^
(
)
[
]
{
}
$
\
\
x0A
\xFF
%
1 | <?php |
escapeshellarg()
给所有参数加上一对双引号,强制为字符串
1 | <?php |