在Struts 2中使$ {}运算符XSS安全(与tapestry相同)

时间:2014-04-29 12:53:29

标签: jsp struts2 jstl xss ognl

正如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名称时,您可以看到警报!

2 个答案:

答案 0 :(得分:9)

  1. Struts2 <s:property value="name" />默认会自动转义;
  2. 默认情况下,
  3. JSTL <c:out value="${name}" />会自动转义;
  4. JSP EL ${name}未被转义。
  5. 您可以使用${fn:escapeXml(name)}显式转义它,或者设置默认情况下执行的转义,创建自定义ELResolver,如本文中所述:

答案 1 :(得分:4)

简短回答:在进入应用程序或前往视图层的途中使其安全。

Tapestry的${}是安全的,因为它没有使用JSP / JSP EL。通过使用JSP EL ${}来解决诸如<c:out>之类的问题,而不是逃避的事情就是其中之一。