我遇到了不幸的情况,我必须通过连接字符串来构建 SQL 字符串 - 经典的 SQL 注入(inject)场景。我无法使用准备好的语句。
如果我转义 '
字符,我安全吗?或者还有其他攻击媒介吗?
我正在使用 MyBatis,它是 ${}
表示法(与生成准备好的语句的 #{}
相比)。我对此别无选择 - 它必须是${}
。我无法使用准备好的语句。
编辑:
增加一点清晰度;这是一个ASW Redshift UNLOAD command 。 UNLOAD 的第一个参数是 SQL 字符串。
最佳答案
(由于 Redshift 的限制,您无法以正确的方式执行此操作):
在 PostgreSQL 上,将 standard_conforming_strings
设置为 on
所有,您需要做的就是双引号,将 '
变成''
。就是这样。
除非 standard_conforming_strings
关闭或者您使用 E''
字符串,否则反斜杠并不重要。如果其中任何一个为真,那么您必须进行反斜杠转义。
由于 Redshift 基于一个古老的 PostgreSQL 版本的分支,我不确定这如何适用于它。阅读有关其词法结构和语法的文档是明智的做法,以验证它是否与 PostgreSQL 的工作方式一致。
关于java - 防止 Redshift SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29045170/