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

Ali*_*ahi 2 xss jsp jstl struts2 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应用程序,打开modelDriven\modelDrivenResult.jsp并添加以下行:

Am I safe  ${name} 
Run Code Online (Sandbox Code Playgroud)

现在,当您运行展示案例并输入<script> alert('xxxx') </script>gangester名称时,您可以看到警报!

And*_*ios 9

  1. Struts2 <s:property value="name" />默认自动转义;
  2. <c:out value="${name}" />默认情况下,JSTL会自动转义;
  3. JSP EL ${name}不会被转义.

您可以使用显式转义它${fn:escapeXml(name)},或者设置默认情况下执行的转义,创建自定义ELResolver,如本文中所述:

  • @AlirezaFattahi我给你的原因是:Struts 2使用JSP.JSP EL不会转义通过`$ {}`呈现的值.**Tapestry不使用JSP.** (2认同)