OWASP Java Encoder Project 是否足以防止反射 XSS?

Is OWASP Java Encoder Project enough to prevent reflected XSS?

我一直在阅读有关反射 XSS 预防的文章。据我了解,输出编码是处理反射型 XSS 的主要方式。一些可用的工具是 OWASP Java 编码器项目和 OWASP ESAPI。我有一个 java/JSP 网络应用程序。当相应的 .java 文件中已经存在输入验证时,我不确定是否还应该对 .jsp 文件执行输入验证。所以我有以下问题:

  1. OWASP Java 编码器项目足以防止反射 XSS 吗?
  2. 我需要对 .jsp 文件进行输入验证吗?
  3. 如果 2. 是肯定的,那么创建我自己的输入验证函数或使用 ESAPI 验证器 class 会更好吗?
  4. 如果我必须使用ESAPI,那就意味着我需要添加ESAPI.properties和validation.properties。鉴于我的项目是一个 Ant 项目,我应该在哪里添加这些文件?

提前致谢。

稍后我会解决您的个别问题,但首先我想建议您通读 OWASP Cross-Site Scripting Prevention Cheat Sheet。这将涵盖您需要了解的所有基础知识,包括有关 defense-in-depth 方法的讨论。现在回答您的具体问题。

  1. OWASP Java Encoder project足以防止reflected XSS吗? 答案: 如果使用正确(即你使用正确的上下文编码器),对于 Java/JSPs,OWASP Java 编码器项目或 ESAPI 编码器应该足以在除少数边缘情况外的所有情况下防止 XSS。这些边缘情况包括 DOM-based XSS(所以,从技术上讲,不是 'reflected',我知道)或者你要求允许某些 HTML mark-up 的情况。 (例如,可能收集用户评论。)在这些情况下,您还需要利用 HTML 消毒剂,例如 OWASP AntiSamy 项目或 OWASP Java HTML Sanitizer 项目。
  2. 我需要对.jsp文件进行输入验证吗? 回答: 不是绝对必要的(假设您正确使用了输出编码),但这不会造成伤害。它被认为是 defense-in-depth 策略的一部分,特别是在那些涉及 mixed-encoding 上下文的棘手领域,例如在 Java 脚本中呈现 URL。除了输入验证之外,还强烈建议 Content-Security-Policy headers,尽管 CSP 在 green-field 方法中比在遗留应用程序中更容易使用。
  3. 如果 2. 是肯定的,创建我自己的输入验证函数或使用 ESAPI Validator class 会更好吗? 答案: 在大多数情况下,您可以根据一些简单的正则表达式匹配自己进行 allow-list 验证。 (虽然不要将验证写为 block-lists。)ESAPI 验证可能比您需要的更多,即使是 ESAPI 项目 co-lead,我个人也不会推荐它,除非您计划将 ESAPI 用于一些其他目的(因为它拖入了很多传递依赖性)。
  4. 如果我必须要用ESAPI,那就意味着我需要加上ESAPI.properties和validation.properties。鉴于我的项目是 Ant 项目,我应该在哪里添加这些文件? 答案: 没有 使用ESAPI,但如果你这样做,ESAPI.propertiesValidation.properties 文件的去向与你是否使用 Ant 或 Maven 或 Gradle 等无关。看 class JavaESAPI 文档 class org.owasp.esapi.reference.DefaultSecurityConfiguration 了解如何找到 ESAPI.propertiesValidation.properties 文件的详细信息。

希望对您的问题有帮助。