xss绕过和htmlspecialchars函数绕过
文章目录
前言
一、什么是htmlspecialchars函数
当你编辑文本的时候会自然而然的用到html标签,而有的时候,我们不希望html标签被浏览器识别,所以我们就用到了这个函数。我们可以利用这个函数把html标签转化为浏览器不能识别的字符,或者可以这么理解,利用这个函数转化以后,html标签就可以在浏览器原样输出了。
htmlspecialchars()函数,具有三个参数,第一个参数为必选参数,表示待处理的字符串,第二个参数为可选参数,专门针对字符串中的引号操作,默认值:ENT_COMPAT,只转换双引号。ENT_QUOTS,单引号和双引号同时转换。ENT_NOQUOTES,不对引号进行转换。第三个参数为处理字符串的指定字符集
这里补充一下知识点
htmlspecialchars()函数吧一些预定义的字符转换为 HTML实体
预定义的字符是:
&(和号)–>&
" -->"
’ -->'
<(小于)–> <
(大于)–> >
该函数的语法是:htmlspecialchar(string ,flags,character-set,double_encode)
过滤原理:htmlspecialchar() 函数把预定义的字符转换为了HTML实体,从而使xss攻击失效,但这个函数不会过滤双引号和单引号,只有设置了quotestyle规定如何编码双引号和单引号,才能过滤掉双引号和单引号
可用的quotestyle类型:
ENT_COMPAT- 默认。仅编码双引号
ENT_QUOTES -编码双引号和单引号
ENT_NOQUOTES - 不编码任何符号
二、xss绕过和htmlspecialchars函数绕过
1.大小写绕过
这里我们进行实验
我们由代码审计发现,过滤掉了小写
因此我们可以进行大写绕过
插入后,成功绕过。
这里补充一下可以绕过的代码
2. htmlspecialchars函数绕过
进行该实验,代码审计可知
由原理可知,该函数过滤掉了大部分符号,但没定义quotestyle类型,默认知识过滤了双引号
可以利用zhian’ οnclick=‘alert(111)’;
进行注入实验,或者试试我刚刚补充的代码
上传成功,原理很简单,zhian’闭合前面的’,后面执行语句,实验结束。
总结
本次实验介绍了xss过滤的应对方法和一些积累的xss绕过代码,大家平时练习时多多尝试一下。