🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
总结 htmlentities转换所有的[html实体字符](https://www.w3school.com.cn/tags/html_ref_entities.html) htmlspecialchars只格式化& 、’、 “、 这几个特殊符号。 使用htmlentities不指定编码的话遇到中文会乱码 使用htmlspecialchars()函数默认只是转化双引号`"`, 不对单引号`'`,因为它1第二个参数默认是ENT_COMPAT ``` //不转化单引号(默认)等同htmlspecialchars(string) htmlspecialchars(string, ENT_COMPAT) //转化单双引号 htmlspecialchars(string, ENT_QUOTES) //不转化如何的引号,用 htmlspecialchars(string, ENT_NOQUOTES) ``` >[danger]尽量少用htmlentities, 在全部英文的时候htmlentities和htmlspecialchars没有区别,都可以达到目的.但是,中文情况下, htmlentities却会转化所有的html代码,连同里面的它无法识别的中文字符也给转化了 如果用它则在后面加上正确的编码如:`htmlentities($name, ENT_NOQUOTES, GB2312)` 。 这两个函数不能防止SQL注入攻击 ## **通用函数过滤xss攻击** ``` define('MAGIC_QUOTES_GPC',ini_set("magic_quotes_runtime",0)?true:false); //php防注入和XSS攻击通用过滤. $_GET && SafeFilter($_GET); $_POST && SafeFilter($_POST); $_COOKIE && SafeFilter($_COOKIE); function SafeFilter (&$arr) { $ra=Array('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/','/script/','/javascript/','/vbscript/','/expression/','/applet/','/meta/','/xml/','/blink/','/link/','/style/','/embed/','/object/','/frame/','/layer/','/title/','/bgsound/','/base/','/onload/','/onunload/','/onchange/','/onsubmit/','/onreset/','/onselect/','/onblur/','/onfocus/','/onabort/','/onkeydown/','/onkeypress/','/onkeyup/','/onclick/','/ondblclick/','/onmousedown/','/onmousemove/','/onmouseout/','/onmouseover/','/onmouseup/','/onunload/'); if (is_array($arr)) { foreach ($arr as $key => $value) if (!is_array($value)) { if (!MAGIC_QUOTES_GPC) { $value = addslashes($value); //给单引号(')、双引号(")、反斜线(\)与NUL(NULL字符)加上反斜线转义 } $value = preg_replace($ra,'',$value); //删除非打印字符,粗暴式过滤xss可疑字符串 $arr[$key] = htmlentities(strip_tags($value)); //去除 HTML 和 PHP 标记并转换为HTML实体 return $arr; } else { SafeFilter($arr[$key]); } } } ``` ## **防xss与sql注入** ~~~php function SafeFilter (&$arr){ $ra=Array('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/','/select/','/from/','/update/','/delete/','/drop/','/alter/','/script/','/javascript/','/vbscript/','/expression/','/applet/','/meta/','/xml/','/blink/','/link/','/style/','/embed/','/object/','/frame/','/layer/','/title/','/bgsound/','/base/','/onload/','/onunload/','/onchange/','/onsubmit/','/onreset/','/onselect/','/onblur/','/onfocus/','/onabort/','/onkeydown/','/onkeypress/','/onkeyup/','/onclick/','/ondblclick/','/onmousedown/','/onmousemove/','/onmouseout/','/onmouseover/','/onmouseup/','/onunload/'); if (is_array($arr)){ foreach ($arr as $key => $value){ if (!is_array($value)){ //不对magic_quotes_gpc转义过的字符使用addslashes(),避免双重转义。 if (!get_magic_quotes_gpc()) { $value = addslashes($value); //给单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符) } $value = preg_replace($ra,'',$value); //删除非打印字符,粗暴式过滤xss可疑字符串 $arr[$key] = htmlentities(strip_tags($value)); //去除 HTML 和 PHP 标记并转换为 HTML 实体 }else{ SafeFilter($arr[$key]); } } }else{ if(!get_magic_quotes_gpc()) //不对magic_quotes_gpc转义过的字符使用addslashes(),避免双重转义。 { $arr = addslashes($arr); //给单引号(')、双引号(")、反斜线(\)与 NUL(NULL 字符) //加上反斜线转义 } $arr = preg_replace($ra,'',$arr); //删除非打印字符,粗暴式过滤xss可疑字符串 $arr = htmlentities(strip_tags($arr)); //去除 HTML 和 PHP 标记并转换为 HTML 实体 } } //使用 $post_info=array( 'aa'=>'121212<meta http-equiv="refresh" content="0;">', 'bbb'=>'<script>alert(111)</script>'); SafeFilter($post_info);print_r($post_info); $str = 'www.testdemo.com<meta http-equiv="refresh" content="0;">';SafeFilter ($str);echo $str; ~~~