正如http://www.disasterarea.co.uk/blog/xss-vulnerabilities-in-web-frameworks-2/
中所述$ {}在struts 2中不是xss安全的,而在tapestry 5中是安全的。
我不是Tapestry的人,但我想知道上面是否正确。
据我所知,${}
是JSLT的一部分,它不依赖于任何Web框架。因此,如果上面的句子是正确的并且${}
在挂毯中是安全的XSS,我们怎样才能在struts 2中使其安全。
更新:
要测试它,我运行struts2-showcase app,打开modelDriven\modelDrivenResult.jsp
并添加以下行:
Am I safe ${name}
现在,当您运行展示案例并输入<script> alert('xxxx') </script>
作为gangester名称时,您可以看到警报!
答案 0 :(得分:9)
<s:property value="name" />
默认会自动转义; <c:out value="${name}" />
会自动转义; ${name}
未被转义。您可以使用${fn:escapeXml(name)}
显式转义它,或者设置默认情况下执行的转义,创建自定义ELResolver,如本文中所述:
答案 1 :(得分:4)
简短回答:在进入应用程序或前往视图层的途中使其安全。
Tapestry的${}
是安全的,因为它没有使用JSP / JSP EL。通过使用JSP EL ${}
来解决诸如<c:out>
之类的问题,而不是逃避的事情就是其中之一。