我正在研究我的 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;
而不是 &
这样最终用户就会在 View 中看到 &
而不是 &
。代码和数据库对 XSS 不敏感。只有 View 是。然后你应该只在那里转义它。
更新:您发布了 4 个关于同一主题的主题:
- Cross Site Scripting - Hidden Form Fields
- HttpServletRequest - Quick way to encode url and hidden field paramaters
- HttpServletRequest - SetParameter
- 这个。
我只会警告你:你不需要需要在 servlet/filter/javacode/database/whatever 中转义它。您只是在不必要地使事情复杂化。只需在显示期间将其转义即可。就这样。
关于Java 5 HTML 转义以防止 XSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2333586/