htmlspecialchars
xss攻击很多场景下htmlspecialchars过滤未必能奏效。
<?php $name = $_GET["name"]; $name = htmlspecialchars``($name); ?> <input type='text' value='<?php echo $name?>'>
1.形成反射xss
htmlspecialchars默认是不过滤单引号的,只有设置了:quotestyle选项为ENT_QUOTES才会过滤单引号,如果此时你得输出为
那么仍然会绕过htmlspecialchars()函数的检查,从而造成一个反射型的xss
2.
仅仅用了htmlspecialchars函数的地方错用了该函数导致的xss,源码如下:
<meta http-equiv=Content-Type content="text/html;charset=gbk"> <script src="http://wooyun.org/js/jquery-1.4.2.min.js"></script> <?php $name = $_GET["name"]; echo "<script type='text/javascript'> $(document).ready(function(){ $('#text').html(".htmlspecialchars($name)."); }) </script>"; ?>
此处用html()做输出,仅考虑双引号单引号以及尖括号显然已经不够,还必须考虑其他过滤,此时应该使用json_encode()函数处理。
$('#text').html(".htmlspecialchars($name)."); 修改为 $('#text').html(".json_encode(htmlspecialchars($name)).");
3.客户端造成htmlspecialchars失效;文章来源:https://www.toymoban.com/news/detail-400140.html
上面3个场景仅仅只是较为常见的,还有一些别的场景可能会导致htmlspecialchars失效。尤其是各种编码转换、富文本、进入数据库再取出数据库这些地方等等。文章来源地址https://www.toymoban.com/news/detail-400140.html
到了这里,关于XSS 攻击时怎么绕过 htmlspecialchars 函数的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!