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 ...
随机推荐
- WC2018伪题解
NOIP分数过低的场外选手,一个月之后才有幸膜到这套卷子.感觉题目质量很不错啊,可惜了T1乱搞可过,T2题目出锅非集训队员没有通知到,导致风评大幅被害. 感觉Cu的话随手写两个暴力就稳了,Ag的话T3 ...
- Android Studio --> Gradle Build设置自动
ps:http://www.cnblogs.com/kangyi/p/4448398.html 应用场景 通常情况下我们的apps发布后也就是release模式下log是不显示的,debug模式下是显 ...
- 【8.28校内测试】【区间DP】
感受到了生活的艰辛QAQ...这才是真正的爆锤啊...(因为t1t3还没有理解所以只能贴t2叻QAQ 区间DP...爆哭把题理解错了,以为随着拿的东西越来越多,断点也会越来越多,出现可以选很多的情况Q ...
- noip2009最优贸易
试题描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分为双向通行的道路,双 ...
- CDOJ 1314 Hash Perfectly FFT
Hash Perfectly 题目连接: http://acm.uestc.edu.cn/#/problem/show/1314 Description In computing, a hash ta ...
- Educational Codeforces Round 10 D. Nested Segments 离线树状数组 离散化
D. Nested Segments 题目连接: http://www.codeforces.com/contest/652/problem/D Description You are given n ...
- HDU 5642 King's Order 动态规划
King's Order 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5642 Description After the king's speec ...
- WebDriver元素查找方法摘录与总结
WebDriver元素查找方法摘录与总结 整理By:果冻迪迪 selenium-webdriver提供了强大的元素定位方法,支持以下三种方法. • 单个对象的定位方法 • 多个对象的定位方法 • 层级 ...
- 【转】Internet连接正常但是没有网络,禁用以太网以后再重新启动就可以使用了,原因是什么?
只是粘贴别人的答案,觉得有理,就放在博客里方便以后再学习~ 这个和网络中hdcp服务有关,网卡要在网路中通讯就必须要网络设备一般是路由器或者交换机分配地址,只有给了你电脑门牌号,信件投递能准确无误.你 ...
- xcode的ios工程目录结构复习
目录结构: a.supporting files: main.m和资源文件 xxx-info.plist:包含应用程序相关属性列表,如版本,程序名等 .pch文件:预编译头文件,相当于MFC里的std ...