哥们,要是让你绕过去了,黑客也就绕过去了。不要想着从前台骗过过滤器,如果系统设置非常严格,所有从前台设置的输入信息都会被xss过滤器过滤,一般是把特殊字符删除或者转译(比如大于号小于号双引号斜杠等),避免用户通过非法手段存储注入代码,但是一般的web系统,都不会在显示的时候重新转码,所以,如果你可以直接访问数据库,则可以讲特殊字符的代码直接写到数据库里,页面就会直接显示了。
函数:htmlentities(string,quotestyle,character-set)
参数二是可选的。
规定如何编码单引号和双引号。
ENT_COMPAT - 默认。仅编码双引号或不成对的单引号。
ENT_QUOTES - 编码双引号和单引号。
ENT_NOQUOTES - 不编码任何引号。
参数三也可选的,是转换的字符集类型。
有这么一种情形:当我们使用这个函数的时候,使用了参数二。设置了过滤掉双引号很单引号这些东西(或许不编码)就容易出现XSS。
如:
?php
echo htmlspecialchars($_GET[url], ENT_QUOTES);
?
替换掉url里面的单引号和双引号,看起来是过滤的不错的,但是如果这个url没有出现单引号或双引号呢?或者双引号和单引号以另外的情况出现呢(二次编码)?
关于二次编码:
scriptalert(document.cookie)/script
如UTF-7编码后的
+ADw-SCRIPT+AD4-alert(document.cookie)+ADw-/SCRIPT+AD4-
最终为:
%2bADw-SCRIPT%2bAD4-alert(document.cookie)%2bADw-%2fSCRIPT%2bAD4-
可以考虑用于对付那些没有设置字符集,并且过滤了 的情况。
绕不过。
所谓绕过就是挑程序员忘记正确转码的地方下手。
注意并非htmlspecialchars就万事大吉,不同的地方需要不同的转码。所以所谓绕过htmlspecialchars也可能指那个漏洞点用htmlspecialchars转码压根不正确。
我来说两句