有什么 绕过 htmlentities 进行 xss 攻击的方法吗

如题所述

第1个回答  2017-06-08
函数:htmlentities(string,quotestyle,character-set)

参数二是可选的。
规定如何编码单引号和双引号。

ENT_COMPAT - 默认。仅编码双引号或不成对的单引号。

ENT_QUOTES - 编码双引号和单引号。

ENT_NOQUOTES - 不编码任何引号。
参数三也可选的,是转换的字符集类型。

有这么一种情形:当我们使用这个函数的时候,使用了参数二。设置了过滤掉双引号很单引号这些东西(或许不编码)就容易出现XSS。

如:

<?php
echo htmlspecialchars($_GET[url], ENT_QUOTES);
?>
替换掉url里面的单引号和双引号,看起来是过滤的不错的,但是如果这个url没有出现单引号或双引号呢?或者双引号和单引号以另外的情况出现呢(二次编码)?

关于二次编码:

<script>alert(document.cookie)</script>

如UTF-7编码后的

+ADw-SCRIPT+AD4-alert(document.cookie)+ADw-/SCRIPT+AD4-

最终为:
%2bADw-SCRIPT%2bAD4-alert(document.cookie)%2bADw-%2fSCRIPT%2bAD4-

可以考虑用于对付那些没有设置字符集,并且过滤了 <>的情况。