首页 > 解决方案 > 允许某些字符对 ESAPI 编码器免疫?

问题描述

我正在尝试将 ESAPI 编码器与我的 JavaEE 应用程序结合起来,并希望它不对某些字符集进行编码,例如'<'、'!'、'('、')'。

我在文档https://static.javadoc.io/org.owasp.esapi/esapi/2.0.1/org/owasp/esapi/Encoder.html上读到“所有字符都应该被编码,除了一个特定的列表“免疫”字符”。

我想知道在哪里以及如何配置这个特定的“免疫”字符列表。它会在 ESAPI.properties 文件中吗?

标签: javajakarta-eeowaspesapi

解决方案


简单的答案是,你不能。或者至少不容易。您可以通过将ESAPI.properties中的行更改为:

ESAPI.Encoder=org.owasp.esapi.reference.DefaultEncoder

类似于

ESAPI.Encoder=com.MyCompany.myApp.MyEncoder

然后在 MyEncoder.java 中,用您自己的替换一个或多个 ESAPI对其各种变量的初始化。IMMUNE_*屁股这是唯一的方法。没有方法或属性可以重新定义它,因为在一般情况下,您永远不应该这样做。(有一个 [糟糕的,IMO] 设计决定使 ESAPI 的所有参考实现都成为单例,因此为 DefaultEncoder 类提供这样的方法会让我为类的所有实例更改它,这似乎太危险了。)

所以与其像我一样回答你的问题,我应该问你为什么要这样做?IMMUNE_CSS编解码器最近添加了“#”(目前仅在 GitHub 上的“开发”分支中),但即使是在没有现任和前任 OWASP 项目负责人广泛讨论的情况下也没有完成。在所有已知情况下,免疫列表都是明智地选择“安全”的。然后不打算仅应用于一些已知安全的边缘情况。这就是为什么我要问“你为什么要这样做?你具体要达到什么目的?” 因为您尝试做的事情可能有更好的方法。


推荐阅读