xss防护

xss的防护javascript

反射型xss测试的时候,能够使用扫描器,或者burp进行fuzzhtml

存储型xss测试的时候,能够直接把字典中的payload都塞进去,根据弹窗的编号,就知道是哪一个。但这个容易被发现,因此能够先试探一下特殊符号是否被过滤。前端

DOM型xss测试,主要以阅读js代码为主。在页面上找打输入点的相关dom节点,在开发者选项中搜索一下,根据搜索结果去看是否被相关的JS操做,若是有js的操做,就去看咱们的输入操做后输出在哪一个地方,就按照常规的xss思路进行构建。java

防护通常来讲,作实体字符编码,htmlspecialchars(), 函数功能就是把特殊符号,好比尖括号,引号转换成实体编码,这样就不会再输入的地方去干扰页面源代码。正则表达式

通过实体字符编码后,用户输入的特殊符号在源代码中就变成编码,可是在页面输出的时候,仍是会显示成原来的样子。浏览器

当输出位置在元素内容里面,而且被实体编码后,基本上就没有xss的可能了。dom

可是若是输出在事件属性中,仍是有可能存在绕过的可能性。xss

好比在a标签中,<a href=javascript:alert(1)>,这种形式,没有尖括号也没有引号,就有可能被绕过。若是存在相似这种的状况,须要在连接属性中加上http://或https://的正则表达式来限制。函数

xss的绕过方式测试

绕过过滤

一、前端限制,直接用F12开发者选项修改js既可,或者用burpsuite绕过。

二、字符过滤,双写,大小写绕过 经过注释符绕过,也能够经过换行符绕过

绕过编码

一、明确浏览器解析的机制

二、明白机制后,选择对应的编码

(1)输出在标签间的状况:测试<>是否被过滤或转义,若无则直接<imgsrc=1onerror=alert(1)> (2)输出在script标签内:咱们须要在保证内部JS语法正确的前提下,去插入咱们的payload。若是咱们的输出在字符串内部,测试字符串可否被闭合。若是咱们没法闭合包裹字符串的引号,这个点就很难利用了。可能的解决方案:能够控制两处输入且\可用、存在宽字节 (3)输出在HTML属性内:首先查看属性是否有双引号包裹、没有则直接添加新的事件属性;有双引号包裹则测试双引号是否可用,可用则闭合属性以后添加新的事件属性;TIP:HTML的属性,若是被进行HTML实体编码(形如'&#x27),那么HTML会对其进行自动解码,从而咱们能够在属性里以HTML实体编码的方式引入任意字符,从而方便咱们在事件属性里以JS的方式构造payload。 (4)输出在JS中,空格被过滤:使用/**/代替空格。 (5)输出在JS注释中:设法插入换行符%0A,使其逃逸出来。 (6)输出在JS字符串内:能够利用JS的十六进制、八进制、unicode编码。 (7)输出在src/href/action等属性内:能够利用javascript:alert(1),以及data:text/html;base64;加上base64编码后的HTML。

(8)当咱们的XSSpayload位于这些标签中间时,并不会解析,除非咱们把它们闭合掉。

​<textarea></textarea>
<title></title>
<iframe></iframe>
<noscript></noscript>​

<noframes></noframes> <xmp></xmp> <plaintext></plaintext>

相关文章
相关标签/搜索