Struts 2编码输入参数以避免XSS

Bor*_*nov 4 java security xss struts2

我有一个使用Struts 2构建的应用程序.它存在跨站点脚本(XSS)攻击的一些问题.我想以类似于JSP的方式编码一些动作输入参数<c:out value="${somevalue}"/>在Struts 2中有什么简单的方法吗?Java API方法会很好.

编辑我找到了这个 - http://www.owasp.org/index.php/Talk:How_to_perform_HTML_entity_encoding_in_Java

有经验吗?

Jig*_*shi 10

您可以使用

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

${fn:escapeXml(someValue)}
Run Code Online (Sandbox Code Playgroud)

还有一个很好的API JSoup

清理不受信任的HTML

问题

您希望允许不受信任的用户为您网站上的输出提供HTML(例如,作为评论提交).您需要清理此HTML以避免跨站点脚本(XSS)攻击.

将jsoup HTML Cleaner与a指定的配置一起使用Whitelist.

String unsafe = 
      "<p><a href='http://example.com/' onclick='stealCookies()'>Link</a></p>";
String safe = Jsoup.clean(unsafe, Whitelist.basic());
      // now: <p><a href="http://example.com/" rel="nofollow">Link</a></p>
Run Code Online (Sandbox Code Playgroud)

因此,在处理提交的文本时,您基本上需要做的就是以下内容:

String text = request.getParameter("text");
String safe = Jsoup.clean(text, Whitelist.basic());
// Persist 'safe' in DB instead.
Run Code Online (Sandbox Code Playgroud)

struts2securityaddons

该项目包含其他配置,拦截器和其他用于提高struts 2应用程序安全性的代码.

也可以看看


axt*_*avt 6

作为XSS预防手段转义输入参数有几个不利因素,尤其是:

  • 您无法确定特定输入数据的目的地,因此您无法选择正确的转义方案.
  • 转义输入数据掩码没有输出转义.如果没有一致的输出转义,您仍然可以意外地将未转义的数据传递给未转义的输出.
  • 转义的存在使数据处理变得复杂.

因此,最好应用一致的输出转义.

也可以看看: