防止 Redshift SQL 注入

Preventing Redshift SQL Injection

我有一个不幸的情况,我必须通过连接字符串来构建一个 SQL 字符串——经典的 SQL 注入场景。我不能使用准备好的语句。

如果我转义 ' 字符我安全吗?或者还有其他攻击媒介吗?

我正在使用 MyBatis,它是 ${} 表示法(对比 #{} 生成准备好的语句)。我别无选择 - 它必须是${}。我不能使用准备好的语句。

编辑:

增加一点清晰度;这是一个 ASW Redshift UNLOAD command。 UNLOAD 的第一个参数是 SQL 字符串。

PreparedStatement (Wikipedia) really is the way to go. In one fell swoop you eliminate a big pile of work and risk regarding SQL Injection 位黑客。

如果你绝对不能't/won使用PreparedStatement,那么你需要阅读各种策略。您将不得不编写一堆检查来检查和修改您的输入和 SQL。没有silver bullet。 (嗯,实际上,PreparedStatement你的灵丹妙药。但没有其他灵丹妙药。)

Google 对于 "sanitize sql input" 这样的项目。您将找到以下资源:

(由于 Redshift 的限制,您无法以正确的方式进行操作):

在 PostgreSQL 上 standard_conforming_strings 设置为 on all 你需要做的是双引号,使 ' 变成 ''.而已。

除非 standard_conforming_strings 关闭或您使用 E'' 字符串,否则反斜杠并不重要。如果其中任何一个为真,那么您必须转义反斜杠。

由于 Redshift 是基于一个古老的 PostgreSQL 版本的分支,我不确定这如何适用于它。阅读有关其词法结构和语法的文档是明智的,以验证它是否与 PostgreSQL 的工作方式一致。