使用NCR防范xss。
来源:互联网 发布:pkpm结构软件介绍 编辑:程序博客网 时间:2024/05/20 15:41
http://my.oschina.net/xpbug/blog/53005
在WEB前端开发的过程中,由于大量的URL和多处使用的传递参数,使得很多开发者经常会留下XSS的漏洞。在安全测试中一旦发现漏洞,必须给开发者开defect。Defect的优先级非常高,必须立刻解决。开发者往往为了快速封堵当前漏洞,使用很tricky的方法。这样子经常导致这边漏洞堵上了,那边漏洞又出现了。
我在开发过程中,总结了自己的一套方法。此方法可以有系统的,一致性的解决XSS问题。本文所使用的开发环境为简单java和jsp平台。对于其他平台,如php,c#,.net,此方法也可用。
首先举两个前端常见的XSS的漏洞。
1, https://test.com.cn?name="><script>prompt('XSS Vulnerability')</script>
如果JSP里面有这么一段代码(本处使用了EL):
<input value="${name}"/>
name参数中的值将会对input进行截断,并声称script片段,从而运行script。
2, https://test.com.cn?name=";alert("Hello");"
如果JSP中的JS有这么一段代码:
<script>var name="${name}";</script>
name参数中的值也会对其截断。并运行alert。
下面讲一下HTML的NCR标准
html使用了不合规范的unicode,也就是ncr标准,&#后面跟代码点,就可以被展现成相应代码点对应的字符。如果使用unicode表达,使用document.createTextNode('\uxxxx').
或者在HTML页面中直接使用&#xxxx.
例如,字的unicode是23383, 在html中,如果这样写:<label>字</label><input name="字" value="字"/>
又例如,>的unicode是62, 在html中,如果这样写:<label>></label><input name=">" value=">"/>
最终user agent在展示html之后,页面将彻底解析成为 <label>></label><input name=">" value=">"/> 展示为<label>></label><input name=">" value=">"/>
注意:这里需要解释。user agent在解释html的时候,会有3个过程:
1, 把NCR替换成真正的字符, 2, 将某些替换好的字符再转成HTML Entities.例如>将变为>。3,将解析好的HTML进行展示。
这时候如果调用innerText(IE) 或者textContent(FF),将会得到展示后的字符串。如果调用innerHTML或者outerHTML,将会得到第2步解析后的字符串。
使用getAttribute().nodeValue永远都是得到的展示后的字符串。
将想要获取的字符串转为NCR格式,保存于attribute之中,在展示后使用getAttribute().nodeValue重新获取原字符串。
展示字符——》NCR——》(innerHTML) HTML entities——》(textContent/innerText/getAttribute)展示字符
使用NCR来解决XSS问题
1,创建一个tag,专门用来将所有的字符转为NCR。tag使用方法如: <ncr:transfer></ncr:transfer>
2,对于第一种XSS使用以下方法
<input value="<ncr:transfer>${name}</ncr:transfer>"/>
3,对于第二种XSS使用以下方法
<div id="test" style="display:none" value-name="<ncr:transfer>${name}</ncr:transfer>"/>
<script>var name=dojo.attr('test','value-name');</script>
这里使用了dojo。dojo.attr(id, attribute)是取id对应的node中的attribute的值。
使用此方法,不用担心${name}里面到底含有什么值,\ ' " , ; < > & #全都不怕。此方法还解决了奇怪字符,和高位字符的乱码问题。高位字符指codepoint大于2^16的字符。在UTF16中,需要用4个字节2个unit来表示。高位字符如果处理不好,在html端会显示乱码。使用NCR格式,可以让HTML正确显示高位字符。
- 使用NCR防范xss。
- XSS防范
- 使用AntiSamy防范XSS跨站脚本攻击
- 使用antisamy防范XSS攻击及常用antisamy策略文件
- 使用AntiSamy防范XSS跨站脚本攻击
- 使用AntiSamy防范XSS跨站脚本攻击
- Java 防范XSS攻击
- XSS攻击防范
- xss的防范要点
- XSS攻击的防范
- XSS攻击的防范
- 防范XSS攻击
- Yii2 XSS 防范策略
- xss防范攻击
- XSS防范之Encode
- XSS攻击和防范
- XSS防范--AntiSamy介绍
- 反射型XSS 之 防范
- PHP模拟守护进程
- LINUX常用命令
- js传递给NPAPI插件的整数参数在firefox和chrome需要采用不同的获取方式
- 国内外土地利用和覆盖变化研究进展
- linux下内存大小、起始地址的解析与修改
- 使用NCR防范xss。
- 每天看超过500封简历的HR详谈求职简历筛选之道
- cocos2d-x 的新手教程,两个大神的博客链接,新手入门还是不错的
- 程序员面试精要-C/C++程序设计-预处理/const/sizeof(面试宝典读书笔记)
- Java获取当前类名、方法名
- AJAX常用code
- Opencv中测试最佳阀值及阀值解释
- JQuery:在input中只能输入数字,并且不能复制粘贴,不能切换输入法
- 单片机控制NOKIA5110液晶屏之模块化编程