Java 5 HTML 转义以防止 XSS

标签 java jsp xss

我正在研究我的 Java 应用程序中的一些 XSS 预防措施。

我目前有自定义构建的例程,可以转义存储在数据库中的任何 HTML,以便在我的 jsps 中安全显示。但是,如果可能的话,我宁愿使用内置/标准方法来执行此操作。

我目前没有对发送到数据库的数据进行编码,但也想开始这样做。

是否有任何内置方法可以帮助我实现这一目标?

最佳答案

您通常在显示 期间逃避 XSS,而不是在存储 期间。在 JSP 中,您可以为此使用 JSTL(只需将 jstl-1.2.jar 放入 /WEB-INF/lib) <c:out> 标记或 fn:escapeXml 函数。例如

<input name="foo" value="<c:out value="${param.foo}" />">

<input name="foo" value="${fn:escapeXml(param.foo)}">

就是这样。如果您在处理输入和/或存储在 DB 中时也这样做,那么它就会全部分布在业务代码和/或数据库中。你不应该这样做,这只是维护上的麻烦,当你在不同的地方这样做时,你会冒两次或更多的风险(例如 & 会变成 &amp;amp; 而不是 &amp; 这样最终用户就会在 View 中看到 &amp; 而不是 & 。代码和数据库对 XSS 不敏感。只有 View 是。然后你应该只在那里转义它。

更新:您发布了 4 个关于同一主题的主题:

我只会警告你:你不需要需要在 servlet/filter/javacode/database/whatever 中转义它。您只是在不必要地使事情复杂化。只需在显示期间将其转义即可。就这样。

关于Java 5 HTML 转义以防止 XSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2333586/

相关文章:

java - 使用分隔符提取字符串中间的数字

html - 我的 css 导入失败

php - 如何使用 PHP 实现 OWASP 规则 5 来缓解 XSS

mysql - 如果用户知道项目的主键 ID,从安全角度来看这是不好的做法吗

javascript - 跨域资源共享(CORS)——我在这里遗漏了什么吗?

java - 如何存储映射表 - lucene 或 DB?

java - 我究竟做错了什么?我一直得到 NaN? (海伦公式)

java - JUnit 测试类中的设计依赖项

java - 如何在java中保存记录并使用记录值更新同一页面

javascript - 专用提交按钮使用相同的 servlet 将表单数据单独保存到数据库