我正在使用 ESPAI 来预防 Java 中的 SQL 注入(inject)。
我只使用 ESAPI.encoder().encodeForSQL(ORACLE_CODEC,queryparam))
方法。
如果我不在 esapi.properties
中包含 validation.properties
,则会收到 IllegaleStateException
。
请告诉我为什么encodeForSQL()需要validation.properties。
最佳答案
我实际上更担心您正在使用 ESAPI 来阻止 SQL 注入(inject)。通常,这是通过将相关 SQL 查询重写为参数化版本来实现的,例如使用 PreparedStatement
或使用 PreparedStatement
的 JPA 实现。我只是想让您知道,使用 ESAPI 编码 SQL 仅具有临时补救的设计意图,因为特定查询太复杂而无法在事件响应情况下重写。如果您使用 encodeForSQL()
请注意,它是针对编写不良的 SQL 查询的永久性问题的创可贴解决方案。它应该预计查询将被重写,并且对 esapi 的需求将消失。
这是因为从 ESAPI 获得的转义性能不会比从正确编写的 PreparedStatement
获得的性能更好。
ESAPI 需要两个文件才能正常运行。 ESAPI.properties
和 validation.properties
。需要这些文件是因为为了加载大多数类,它们需要从这些文件中读取选项和设置。您没有提供堆栈跟踪,因此不可能诊断您的确切问题,但如果您提供这些文件,问题就会消失。
关于java - ESAPI.encoder().encodeForSQL 中的validation.properties 有何用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35246125/