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

发布于 2024-10-16 17:26:58 字数 403 浏览 3 评论 0原文

我有一个使用 Struts 2 构建的应用程序。它存在一些跨站点脚本 (XSS) 攻击问题。我想以与 JSP 类似的方式对一些操作输入参数进行编码 在 Struts 2 中是否有任何简单的方法可以做到这一点? Java API 方法就可以了。

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

有相关经验吗?

I have an application built with Struts 2. It has some issues with Cross-site scripting (XSS) attacks. I want to encode some of the actions input parameters in a similar fashion to JSP <c:out value="${somevalue}"/> Is there any easy approach to do this in Struts 2? Java API method would do fine.

EDIT I found this one - http://www.owasp.org/index.php/Talk:How_to_perform_HTML_entity_encoding_in_Java

Any experience with it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

被翻牌 2024-10-23 17:26:58

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

${fn:escapeXml(someValue)}

还可以使用还有一个很好的 API JSoup

清理不受信任的 HTML

问题

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

解决方案

使用 jsoup HTML Cleaner 使用 白名单.

字符串不安全= 
      "

链接

"; String safe = Jsoup.clean(unsafe, Whitelist.basic()); // 现在:

链接

因此,在处理提交的文本期间,您基本上需要做的就是以下操作:

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

struts2securityaddons

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

另请参阅

You can use

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

${fn:escapeXml(someValue)}

There is also a Good API JSoup

Sanitize untrusted HTML

Problem

You want to allow untrusted users to supply HTML for output on your website (e.g. as comment submission). You need to clean this HTML to avoid cross-site scripting (XSS) attacks.

Solution

Use the jsoup HTML Cleaner with a configuration specified by 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>

So, all you basically need to do is the the following during processing the submitted text:

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

There is struts2securityaddons

This project contains additional configuration, interceptors, and other code used to improve the security of struts 2 applications.

See also

祁梦 2024-10-23 17:26:58

将输入参数转义作为 XSS 预防手段有几个缺点,特别是:

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

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

另请参阅:

Escaping input parameters as an XSS prevention mean has several disadvanteges, especially:

  • You can't be certain about destination of the particular input data, therefore you can't choose proper escaping scheme.
  • Escaping input data masks lack of output escaping. Without consistent output escaping, you can still pass unescaped data to the unescaped output accidentially.
  • Presence of escaping complicates data processing.

Therefor it would be better to apply consistent output escaping instead.

See also:

乱了心跳 2024-10-23 17:26:58

对于使用 struts 2 标签的 XSS,没有简单的、开箱即用的解决方案。 OWASP ESAPI API 对转义有一些非常有用的支持,并且它们有标记库。

我的方法基本上是通过以下方式扩展 Stuts 2 标签。

  1. 修改 s:property 标记,以便它可以采用额外的属性来说明需要哪种转义(escapeHtmlAttribute="true" 等)。这涉及创建新的 Property 和 PropertyTag 类。 Property 类使用 OWASP ESAPI api 进行转义。
  2. 更改 freemarker 模板以使用新版本的 s:property 并设置转义。

如果您不想修改步骤 1 中的类,另一种方法是将 ESAPI 标记导入 freemarker 模板并根据需要进行转义。然后,如果您需要在 JSP 中使用 as:property 标记,请用 ESAPI 标记将其包装起来。

我在这里写了更详细的解释。

http://www.nutshellsoftware。 org/software/securing-struts-2-using-esapi-part-1-securing-outputs/

我同意转义输入并不理想。

There is no easy, out of the box solution against XSS with struts 2 tags. The OWASP ESAPI API has some support for the escaping that is very usefull, and they have tag libraries.

My approach was to basically to extend the stuts 2 tags in following ways.

  1. Modify s:property tag so it can take extra attributes stating what sort of escaping is required (escapeHtmlAttribute="true" etc.). This involves creating a new Property and PropertyTag classes. The Property class uses OWASP ESAPI api for the escaping.
  2. Change freemarker templates to use the new version of s:property and set the escaping.

If you didn't want to modify the classes in step 1, another approach would be to import the ESAPI tags into the freemarker templates and escape as needed. Then if you need to use a s:property tag in your JSP, wrap it with and ESAPI tag.

I have written a more detailed explanation here.

http://www.nutshellsoftware.org/software/securing-struts-2-using-esapi-part-1-securing-outputs/

I agree escaping inputs is not ideal.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文