InnerHTML属性的XSS利用
来自:http://www.myhack58.com/Article/html/3/7/2011/32395.htm
innerHTML 是个奇怪的HTML属性,不是W3C标准支持的,但几乎所有的厂商都默认支持了这样一个属性,最近一些用这个属性试验了很多,这里来分享下 innerHTML一些有意思的问题。所有的元素都有innerHTML属性,它是一个字符串,用来设置或获取位于对象起始和结束标签内的HTML。通常 使用innerHTML属性来做动态插入
最简单的innerHTML是这么用的:
<br>output:<div id="output"></div>
<script>
var output=document.getElementById("output");
output.innerHTML="hello,world!";
</script>
这段代码的意思通过output变量的innerHTML属性,往div里插入一句hello world!。一般我们写网页代码都是先写一个模板,对一些用户输入之类的变量通过innerHTML往里面插就行了,非常方便
innerHTML更强大的地方在于可以更改格式,我们把输出语句改为:
output.innerHTML="<i>hello,world!<\/i>";
如果代码这样写,hello world!在页面上显示出来就是斜体
黑阔们相信都看到了重点,<i></i>标签被解析了!接下来我们想,如果输入的是<script></script>标签呢?再一次更改输出语句:
output.innerHTML="<script>alert(1);<\/script>";
结果很奇怪,没用如预想一般弹框,而是什么都没有!用firebug查看执行javascript后的代码,结果让人更奇怪了,这 里<script></script>已经被视为标签了,可以从firebug标为蓝色而看出来,但是为神马不弹窗口呢?
可以猜想这是浏览器对innerHTML解析之后的数据又做了一层编码,再换一个测试语句看看是不是真的:
output.innerHTML="<script>alert(1)<\/script>"
这里我先做了一层HTML编码,解析一次之后应该是<script>alert(1)</script>,如果 innerHTML是解析后直接显示了就应该弹框。查看处理后的源代码,输出 是<script>alert(1)</script>
这样基本就清楚了,innerHTML在javascript处理的时候做过一次HTML解析,然后到了浏览器加载页面时又做了一次HTML编码。看起来天衣无缝,处理也没有什么问题。但是!注意浏览器加载页面和加载javascript顺序是可以改变的
defer属性是专用于延迟加载的。W3shcool上是这样说明的,如果您的脚本不会改变文档的内容,可将defer 属性加入到<script> 标签中,以便加快处理文档的速度。因为浏览器知道它将能够安全地读取文档的剩余部分而不用执行脚本,它将推迟对脚本的解释,直到文档已经显示给用户为止。 我们试试这样的输入:Security" r" D" o! \& k/ G9 M1 G) D
output.innerHTML="<span style=\"display:none;\">1<\/span><script defer>alert(\"1\");<\/script>"
因为IE天然会忽略innerHTML属性的开头脚本,这里加一段隐藏的字符来触发defer脚本。在将javascript推迟解释之后,能弹框了。可惜firefox有点天然呆,压根不支持defer。所以这个弹框只对IE有效,比较局限
InnerHTML属性的XSS利用的更多相关文章
- HTML DOM innerHTML 属性及实现图片连续播放
定义和用法 innerHTML 属性设置或返回表格行的开始和结束标签之间的 HTML. 语法 tablerowObject.innerHTML=HTML 实例 下面的例子返回了表格行的 inner H ...
- innerHTML属性
<!DOCTYPE HTML><html><head><meta http-equiv="Content-Type" content=&q ...
- xss利用和检测平台
xssing 是安全研究者Yaseng发起的一个基于 php+mysql的 网站 xss 利用与检测开源项目,可以对你的产品进行黑盒xss安全测试,可以兼容获取各种浏览器客户端的网站url,cooki ...
- 标签的innerHTML属性和html()
在新公司开发编码的时候,经常写js代码:有时候就需要往某个标签里添加一些html脚本或者要拿到某个标签里的html脚本,那么就会用到innerHTML和html. 1.innerHTML属性 w3sc ...
- JavaScript Dom基础-9-Dom查找方法; 设置DOM元素的样式; innerHTML属性的应用; className属性的应用; DOM元素上添加删除获取属性;
JavaScript Dom基础 学习目标 1.掌握基本的Dom查找方法 domcument.getElementById() Domcument.getElementBy TagName() 2.掌 ...
- innerHTML属性,outerHTML属性,textContent属性,innerText属性区别详解
innerHTML属性用来读取或设置某个节点内的HTML代码. outerHTML属性用来读取或设置HTML代码时,会把节点本身包括在内. textContent属性用来读取或设置节点包含的文本内容. ...
- 火狐不支持innerText属性,只支持innerHTML属性
做的一个js的小程序放到火狐上用不了了,原因是innerText不是标准属性,换成innerHTML属性就好,但是可能需要把html标签给去掉
- innerHTML 属性用于获取或替换 HTML 元素的内容。
innerHTML 属性 innerHTML 属性用于获取或替换 HTML 元素的内容. 语法: Object.innerHTML 注意: 1.Object是获取的元素对象,如通过document.g ...
- 使用innerHTML属性向head中插入字符时报“无法设置 innerHTML 属性。 该操作的目标元件无效”的错误
向head中动态插入script文件,代码如下: var sc = document.createElement("script"); sc.src = "//www.c ...
随机推荐
- 【HDU 6017】 Girls Love 233 (DP)
Girls Love 233 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)To ...
- luoguP3600 随机数生成器 期望概率DP + DP优化
这篇题解更像对他人题解的吐槽和补充? 考虑答案 $E[X] = \sum\limits_{i = 1}^{x} i P(X = i)$ $P(X = i)$不好求................(其实 ...
- [Codeforces #201] Tutorial
Link: 传送门 代码量很少的一套思维题 A: 试一试发现最后状态一定是所有$min,max$间$gcd$的倍数 直接判断数量的奇偶性即可 #include <bits/stdc++.h> ...
- [转][Android]Android数据的四种存储方式
android.database.sqlite类 SQLiteQueryBuilder java.lang.Object android.database.sqlite.SQLiteQueryBuil ...
- ROS知识(1)----ROS Jade安装
ROS入门难,进去之后会是很简单,这是很多人的经验.但是今天安装ROS就吃了闭门羹,安装成功后,回顾发现,关键是操作系统Ubantu14.04没有安装好,一些系统包没有及时更新导致的.这里总结下ROS ...
- Mahout学习之Mahout简单介绍、安装、配置、入门程序測试
一.Mahout简单介绍 查了Mahout的中文意思--驭象的人,再看看Mahout的logo,好吧,想和小黄象happy地玩耍,得顺便陪陪这位驭象人耍耍了... 附logo: (就是他,骑在象头上的 ...
- Fast-settling synchronous-PWM-DAC filter has almost no ripple
An inexpensive way to implement high-resolution digital-to-analog conversion is to combine microcont ...
- jQuery向父辈遍历的方法
通过DOM树可以可容易的访问到html文档中的所有元素 例如向上访问父辈的元素有以下方法 1.parent()方法可以得到所定元素的直接父元素 $("span").parent ...
- 第一篇 对Javascript中原型的深入理解
理解原型对象 在Javascript中不管什么时候,仅仅要创建一个新的函数,就会依据一组特定的规则为该函数创建一个prototype属性,这个属性指向函数的原型对象(这个对象的用途是包括能够有特定 ...
- Last-Modified和If-Modified-Since
Last-Modified 是由服务器往客户端发送的 HTTP 头 If-Modified-Since是由客户端往服务器发送的头 基础知识 1) 什么是”Last-Modified”? ...