XSS绕过之html special chars()函数
功能
htmlspecialchars()函数把一些预定义的字符转换为 HTML 实体。 预定义的字符是:
& (和号)成为 &
" (双引号)成为 "
’ (单引号)成为'
< (小于)成为 <
>(大于)成为 >
语法
该函数的语法:
htmlspecialchars(string,flags,character-set,double_encode)
原理
过滤原理:htmlspecialchars() 函数把预定义的字符转换为 HTML
实体,从而使XSS攻击失效。但是这个函数默认配置不会将单引号和双引号过滤,只有设置了quotestyle规定如何编码单引号和双引号才能会过滤掉单引号
可用的quotestyle类型:
ENT_COMPAT - 默认。仅编码双引号
ENT_QUOTES - 编码双引号和单引号
ENT_NOQUOTES - 不编码任何引号
可使用以下语句绕过: q任何内容’ οnclick=‘alert(111)’
实例
再补充一个例子吧,分别对比一下就可以更直观的理解
代码
<html>
<body>
<?php
$str = "John & 'Adams'";
echo htmlspecialchars($str, ENT_COMPAT);
echo "<br />";
echo htmlspecialchars($str, ENT_QUOTES);
echo "<br />";
echo htmlspecialchars($str,ENT_NOQUOTES);
?>
</body>
</html>
浏览器输出
John & 'Adams'
John & 'Adams'
John & 'Adams'
在浏览器中查看源代码
<html>
<body>
John & 'Adams'<br />
John & 'Adams'<br />
John & 'Adams'
</body>
</html>
案例参考这个网站 : http://yige.org/