xss之htmlspecialchars

  源代码:

可以看到是用htmlspecialchars 对get参数message进行处理,但是他默认不对单引号进行处理的。

只对预定义的字符进行处理:

  • & (和号)成为 &
  • " (双引号)成为 "
  • ' (单引号)成为 '
  • < (小于)成为 <
  • > (大于)成为 >

 

它的语法如下:
htmlspecialchars(string,flags,character-set,double_encode)

    其中第二个参数flags需要重要注意,很多开发者就是因为没有注意到这个参数导致使用htmlspecialchars()函数过滤XSS时被绕过。因为flags参数对于引号的编码如下:

 可用的引号类型:

  • ENT_COMPAT - 默认。仅编码双引号。
  • ENT_QUOTES - 编码双引号和单引号。
  • ENT_NOQUOTES - 不编码任何引号。
默认是只编码双引号的!默认只编码双引号!默认只编码双引号……重要的事情说三遍!!!

 如果我们的源码是:htmlspecialchars($message, ENT_QUOTES),

这个时候才用我们的payload 就不行了,单引号被转义了。

 

 

payload:

输入: ' onclick='alert(111)'       点击触发xss

输入:' onmouseover='alert(1)      触发xss

输入:  ' onmouseover='javascript:alert(1)'   触发xss

posted @ 2019-08-18 18:33  -Zad-  阅读(1116)  评论(0编辑  收藏  举报
jQuery火箭图标返回顶部代码