【问题标题】:protect jsp pages againt xss保护jsp页面反对xss
【发布时间】:2010-11-05 17:54:11
【问题描述】:

我想保护我的网站表单 xss,并且我想确保我的所有数据都是正确和一致的,所以我不想允许将任何脚本添加到我的数据库,这是因为我的数据可能会被使用其他网络服务,所以我想确保我的数据是正确的,不会给其他人造成任何问题。

我只想在数据的输入中进行验证,而不是在输出中进行验证,因此我只会进行一次验证,并且我会确保我的数据库中不存在任何脚本。

编辑:请检查我添加的最后一条评论。

【问题讨论】:

标签: java security jsp xss


【解决方案1】:

使用一些过滤器来清理 HTTP 请求数据。

你可以选择jsoup,它非常好用:

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>

参考:http://jsoup.org/cookbook/cleaning-html/whitelist-sanitizer

【讨论】:

    【解决方案2】:
    【解决方案3】:

    简而言之,您可以编写过滤器来正确转义用户输入(映射到相关的 URL 映射)。可能有现成的插件可以做到这一点,但我不知道。
    可以参考本帖XSS prevention in JSP/Servlet web application

    【讨论】:

    • 使用 ${fn:escapeXml(param.foo)} 正如@BlusC 所说,允许将 '','," 插入到 db 中,我之前尝试过,但它没有不行!
    • 有可用于编码和解码的 commons lang API。 commons.apache.org/lang/index.html
    • @Alaa: 防止用户输入的 HTML 在视图中被逐字解释。 HTML 不会在数据库中被解释,所以这完全没有害处。数据库只理解 SQL(您希望防止 SQL 注入攻击,但这是一个不同的主题)。 XSS 转义只需要在 output 上完成,而不是在 input 上。 c:outfn:escapeXml() 正是这样做的。 @ck-:我看不出过滤器在这方面有什么用处。
    • @BalusC 过滤器可以查看提交的参数,转义 html(或任何标记)。人们不必在前端为此烦恼。替代方式是您提出的方式。查看所有参数可能是一种昂贵的做事方式。
    • @Alaa:JSTL 和 EL 在视图中执行。 c:out 和 fn:escapeXml 不会更改输入。它只是改变了输出。
    猜你喜欢
    • 2015-06-01
    • 2014-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多