如果我围绕sql语句包含解释,即
explain ( [arbitrary sql string] )
我应该能够阻止create
,drop
,truncate
,delete
命令的注入正确吗?
我只是在postgres上尝试了这个并且它似乎有效,但我不知道是否有一个我忘了的角落案例。
答案 0 :(得分:7)
不。它不会起作用。你仍然可以得到这样的东西:
Explain( select columns from table where value = '');injected sql here --)
您所做的就是让攻击者做一些额外的工作,以确定除了通常的单引号外,他们还需要)
字符。
如果您想阻止Sql注入,请确保始终使用参数化查询。
答案 1 :(得分:3)
一般情况下你需要:
1 /使用白名单方法验证您需要的数据。不要将字符或其他内容列入黑名单
2 /使用参数化查询
3 /不要随时使用动态查询