我正在尝试使用 OWASP ESAPI 来验证 spring mvc 项目中的字符串。
到目前为止,我已经做了:
1-
<dependency>
<groupId>org.owasp.esapi</groupId>
<artifactId>esapi</artifactId>
<version>2.1.0.1</version>
</dependency>
2- 添加
ESAPI.properties
和 validation.properties
在资源中:myproject/src/resources/esapi/ESAPI.properties
myproject/src/resources/esapi/validation.properties
3- 将我自己的验证添加到
validation.properties
4- 在我的
application.properties
我设置了 org.owasp.esapi.resources
org.owasp.esapi.resources=classpath:esapi/ESAPI.properties
我在一个方法中有以下行
boolean isValid = ESAPI.validator().isValidInput("user id", userID, "USERID", 20, false);
验证有效,但我在标准输出中打印出以下通知:
System property [org.owasp.esapi.opsteam] is not set
System property [org.owasp.esapi.devteam] is not set
我该如何解决?
我也得到几行:
Not found in 'org.owasp.esapi.resources' directory or file not readable: /usr/local/apache-tomcat-8.0.28/bin/ESAPI.properties
Not found in SystemResource Directory/resourceDirectory: .esapi/ESAPI.properties
SUCCESSFULLY LOADED ESAPI.properties via the CLASSPATH from 'esapi/' using current thread context class loader!
还有其他几个。我如何摆脱这些线?
我也写了一个测试。运行测试后,除了
SUCCESS
之外,我得到了与生产代码几乎相同的注释。部分,此外我得到以下内容:Not found in 'org.owasp.esapi.resources' directory or file not readable: /Users/me/dev/myproject/validation.properties
Found in SystemResource Directory/resourceDirectory: /Users/me/dev/myproject/target/classes/esapi/validation.properties
Loaded 'validation.properties' properties file
所以验证和测试都有效,但我收到了所有这些我想摆脱的通知!
我在配置或其他地方遗漏了什么?
最佳答案
这些是在首次加载 org.owasp.esapi.reference.DefaultSecurityConfiguration 的引导过程中出现的标准警告。因为 ESAPI 日志记录工具是可配置的,并且 DefaultSecurityConfiguration 正在搜索 ESAPI.properties 来告诉它使用哪个记录器,所以 DefaultSecurityConfiguration 不能使用首选的 ESAPI 日志记录工具。 (如果可以猜到,但如果猜错了怎么办?)因此,它转而使用 System.out.println() 将消息打印到标准输出。
早期,我们尝试完全消除这些消息,但后来我们开始收到很多关于人们无法弄清楚 ESAPI.properties 文件放在哪里或让 ESAPI 使用与他们认为应该使用的文件不同的提示.虽然这些消息不是万无一失的,但它们比启动调试器并将其附加到您的应用程序服务器的替代方案要好,这样您就可以找出 ESAPI 找不到 ESAPI.properties 文件的原因。
最重要的是,您几乎无法选择每个人都会满意的东西。在这种特殊情况下,为了避免尚未配置 ESAPI 日志记录工具的 catch-22 情况(这是它尝试做的一部分),唯一合乎逻辑的替代方法是输出到 stdout、输出到 stderr 或输出到一些预先指定的文件。后者很快就被驳回了,因为我们无法决定一个通用的地方,在那里我们可以创建可跨所有操作系统移植的文件,并且我们将保证对它有写权限。并且有人认为 stderr 是错误的,因为这些本身并不是真正的 ERROR 消息。并且由于其他应用程序服务器经常将启动消息写入 stdout 并且大多数操作重定向已经将其重定向到他们知道可以创建的某个文件,因此 stdout 似乎是一个自然的选择。事后看来,定位 ESAPI.properties 文件的算法无疑过于复杂,但这主要是因为向后兼容性问题,它确实为您提供了极大的选择灵活性。
所以底线是你不能完全摆脱这些。您可以设置某些属性,例如提到的 2 个或 org.owasp.esapi.resources 并让其中的一些消失。
有关更多详细信息,请参阅:
https://static.javadoc.io/org.owasp.esapi/esapi/2.1.0.1/org/owasp/esapi/reference/DefaultSecurityConfiguration.html
和
https://github.com/ESAPI/esapi-java-legacy/tree/master/documentation/ESAPI-configuration-user-guide.md
讨论这些属性及其含义/作用。
-凯文
关于spring - 带有 Spring mvc 的 ESAPI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36202459/