1. addslashes
addslashes 对 SQL 语句中的特殊字符进行转义操作, 包括 (), (), (), (NUL) 四个字符, 此函数在 DBMS 没有自己的转义函数时候使用, 但是如果 DBMS 有自己的转义函数, 那么推荐使用原装函数, 比如 MySQL 有 mysql_real_escape_string 函数用来转义 SQL 注意在 PHP5.3 之前, magic_quotes_gpc 是默认开启的, 其主要是在 $GET, $POST, $COOKIE 上执行 addslashes 操作, 所以不需要在这些变量上重复调用 addslashes, 否则会 double escaping 的不过 magic_quotes_gpc 在 PHP5.3 就已经被废弃, 从 PHP5.4 开始就已经被移除了, 如果使用 PHP 最新版本可以不用担心这个问题 stripslashes 为 addslashes 的 unescape 函数
2. htmlspecialchars
htmlspecialchars 把 HTML 中的几个特殊字符转义成 HTML Entity(格式:&xxxx;)形式, 包括 (&),(),(),(<),(>) 五个字符
- & (AND) => &
- (双引号) => " (当 ENT_NOQUOTES 没有设置的时候)
- (单引号) => ' (当 ENT_QUOTES 设置)
- < (小于号) => <
- > (大于号) => >
htmlspecialchars 可以用来过滤 $GET,$POST,$COOKIE 数据, 预防 XSS 注意 htmlspecialchars 函数只是把认为有安全隐患的 HTML 字符进行转义, 如果想要把 HTML 所有可以转义的字符都进行转义的话请使用 htmlentitieshtmlspecialchars_decode 为 htmlspecialchars 的 decode 函数
3. htmlentities
htmlentities 把 HTML 中可以转义的内容转义成 HTML Entityhtml_entity_decode 为 htmlentities 的 decode 函数
4. mysql_real_escape_string
mysql_real_escape_string 会调用 MySQL 的库函数 mysql_real_escape_string, 对 (\x00), (\n), (\r), (), (), (\x1a) 进行转义, 即在前面添加反斜杠(), 预防 SQL 注入注意你不需要在读取数据库数据的时候调用 stripslashes 来进行 unescape, 因为这些反斜杠是在数据库执行 SQL 的时候添加的, 当把数据写入到数据库的时候反斜杠会被移除, 所以写入到数据库的内容就是原始数据, 并不会在前面多了反斜杠
5. strip_tags
strip_tags 会过滤掉 NUL,HTML 和 PHP 的标签
6. 结语
PHP 自带的安全函数并不能完全避免 XSS, 推荐使用 HTML Purifier
来源: https://www.php1.cn/detail/php-5b835863b3.html