好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

如何解决繁琐的WEB前端的XSS问题 - 网站安全 - 自

在WEB前端开发的过程中,由于大量的URL和多处使用的传递参数,使得很多开发者经常会留下XSS的 漏洞 。在安全测试中一旦发现漏洞,必须给开发者开defect。Defect的优先级非常高,必须立刻解决。开发者往往为了快速封堵当前漏洞,使用很tricky的方法。这样子经常导致这边漏洞堵上了,那边漏洞又出现了。   我在开发过程中,总结了自己的一套方法。此方法可以有系统的,一致性的解决XSS问题。本文所使用的开发环境为简单java和jsp平台。对于其他平台,如php, c# ,.net,此方法也可用。   首先举两个前端常见的XSS的漏洞。   1, https:// www.2cto.com ?name="><script>prompt('XSS Vulnerability')</script>     如果JSP里面有这么一段代码(本处使用了EL):   <input value="${name}"/> name参数中的值将会对input进行截断,并声称script片段,从而运行script。   2, https:// www.2cto.com ?name=";alert("Hello");" <script>var name="${name}";</script> name参数中的值也会对其截断。并运行alert。   下面讲一下HTML的NCR标准   html 使用了不合规范的unicode,也就是ncr标准,&#后面跟代码点,就可以被展现成相应代码点对应的字符。如果使用unicode表达,使用document.createTextNode('\uxxxx').   或者在HTML页面中直接使用&#xxxx.   例如,字的unicode是23383, 在html中,如果这样写:<label>&#23383</label><input name="&#23383" value="&#23383"/>   又例如,>的unicode是62, 在html中,如果这样写:<label>&#62</label><input name="&#62" value="&#62"/>   最终user agent在展示html之后,页面将彻底解析成为<label>&gt;</label><input name="&gt;" value="&gt;"/> 展示为<label>></label><input name=">" value=">"/>   注意: 这里需要解释。user agent在解释html的时候,会有3个过程:   1, 把NCR替换成真正的字符,2, 将某些替换好的字符再转成HTML Entities.例如>将变为&gt;。3,将解析好的HTML进行展示。   这时候如果调用innerText(IE) 或者textContent(FF),将会得到展示后的字符串。如果调用innerHTML或者outerHTML,将会得到第2步解析后的字符串。     innerText 现在除了FF 3.6 外,Chrome Safari Opera 均支持了它。 textContent 除了IE8 及其低版本外,IE9 perviewer Chrome Safari Opera 中均支持了它。     使用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}里面到底含有什么值,\ ' " , ; < > & #全都不怕。 此方法还解决了奇怪字符,和高位字符的乱码问题。 作者 xpbug

查看更多关于如何解决繁琐的WEB前端的XSS问题 - 网站安全 - 自的详细内容...

  阅读:47次