MySQL在准备好的语句中检测关键字

时间:2018-04-23 13:19:59

标签: mysql sql

我的代码有效,所以我觉得这个问题很脏,但我似乎无法使用相同的技术找到任何地方,所以想问一下我是否有任何明显的错误&# 39;不要看。

我有一个存储过程,其中一个输入参数通过将它放在SELECTFROM ...之间的预准备语句中来决定返回哪些字段 - 我想这很容易被SQL注入,所以我&#39 ;如果参数包含任何危险的关键字或分隔符,我会对变量进行扫描以拒绝任何内容:

此处x可以是table1.col1, table1.col4, table2.col1

IF LOCATE('DROP', x) > 0 OR LOCATE('INSERT', x) > 0 OR LOCATE('UPDATE', x) > 0
    OR LOCATE(';', x) > 0 OR LOCATE('DELETE', x) > 0 THEN

我在这里错过了一些大事吗?或者实际上有一种预先制作的方法可以在MySQL中执行此操作吗?

1 个答案:

答案 0 :(得分:1)

没有" premade"方式,但正则表达式将简化您的代码:

where x regexp 'DROP|INSERT|UPDATE|;|DELETE'

我不确定这会做你真正想要的。它会找到PREINSERTIONDELETING。但它更简单,相当于你的逻辑。