9.2 内置过滤函数

PHP本身内置了很多参数过滤的函数,以方便开发者简单有效且统一地进行安全防护,而这些函数可以分为多种类型,如SQL注入过滤函数、XSS过滤函数、命令执行过滤函数、代码执行过滤函数,等等,下面我们来看看这些函数的用法。

1.SQL注入过滤函数

SQL注入过滤函数有addslashes()、mysql_real_escape_string()以及mysql_escape_string(),它们的作用都是给字符串添加反斜杠(\)来转义掉单引号(')、双引号(")、反斜线(\)以及空字符NULL。addslashes()和mysql_escape_string()函数都是直接在敏感字符串前加反斜杠,这里可能会存在绕过宽字节注入绕过的问题,而mysql_real_escape_string()函数会考虑当前连接数据库的字符集编码,安全性更好,推荐使用。

2.XSS过滤函数

XSS过滤函数有htmlspecialchars()和strip_tags(),这两个函数的功能大不一样,htmlspecialchars()函数的作用是将字符串中的特殊字符转换成HTML实体编码,如&转换成&amp;,"转换成&quot;,'转换成&#039;,<转换成&lt;,>转换成&gt;这个函数简单粗暴但是却非常有效果,已经能干掉大多数的XSS攻击。

而strip_tags()函数则是用来去掉HTML及PHP标记,比如给这个函数传入“<h1>xxxxx</h1>”,经过它处理后返回的字符串为xxxxx。

3.命令执行过滤函数

通常我们进行系统命令注入的时候会使用到||以及&等字符,PHP为了防止系统命令注入的漏洞,提供了escapeshellcmd()和escapeshellarg()两个函数对参数进行过滤,escapeshellcmd()函数过滤的字符为'&'、';'、'`'、'|'、'*'、'?'、'~'、'<'、'>'、'^'、'('、')'、'['、']'、'{'、'}'、'$'、'\'、'\x0A'、'\xFF'、’%’以及单双引号,Windows下过滤方式则是在这些字符前面加了一个^符号,而在Linux下则是在这些字符前面加了反斜杠(\)。escapeshellarg()函数过滤方式比较简单,给所有参数加上一对双引号,强制为字符串。