我的代码有效,所以我觉得这个问题很脏,但我似乎无法使用相同的技术找到任何地方,所以想问一下我是否有任何明显的错误&# 39;不要看。
我有一个存储过程,其中一个输入参数通过将它放在SELECT
和FROM ...
之间的预准备语句中来决定返回哪些字段 - 我想这很容易被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中执行此操作吗?
答案 0 :(得分:1)
没有" premade"方式,但正则表达式将简化您的代码:
where x regexp 'DROP|INSERT|UPDATE|;|DELETE'
我不确定这会做你真正想要的。它会找到PREINSERTION
和DELETING
。但它更简单,相当于你的逻辑。