SQL 注射预防方法

SQL Injection Prevention Method

如果我围绕 sql 语句进行解释,即

explain ( [arbitrary sql string] )

我应该能够防止 createdroptruncatedelete 命令的注入,正确吗?

我只在 postgres 上试过这个,它似乎有效,但我不知道是否有我忘记的极端情况。

没有。它不会工作。你仍然可以得到这样的结果:

Explain( select columns from table where value = '');injected sql here --)

你所做的只是让攻击者做一点额外的工作来弄清楚他们除了通常的单引号之外还需要 ) 字符。

如果您想防止 Sql 注入,请确保您始终 使用参数化查询。

您一般需要:

1/ 使用白名单方法验证您需要的数据。请勿将字符或其他内容列入黑名单

2/ 使用参数化查询

3/ 任何时候都不要使用动态查询