如何检查MySQL SELECT String是否只存在SELECT?

时间:2012-10-24 15:21:00

标签: php mysql select

我有一个模块,用户可以使用MySQL语句创建报告。他们只需要使用SELECT语句。我用strpos("", $sSelect)检查一下。有没有任何解决方案,我如何检查所有其他危险语句(如DROP, Replace, DELETE, TRUNCATE, ALTER,... etc.)上的字符串。只允许SELECT。

格尔茨

2 个答案:

答案 0 :(得分:2)

您是否可以为创建报告的人员更改MySQL用户权限?如果是这样,你可以限制访问SELECT栏的所有内容吧?您只需在创建报告时以此用户类型连接,并连接到普通用户帐户以获取其他所有内容。

答案 1 :(得分:0)

你可以使用正则表达式。

if (!preg_match('#^SELECT .*#i', ltrim($your_string))) {
    // not allowed...
}

如果字符串不以SELECT语句开头(不区分大小写)执行某些操作......

但是,这不是最好的方法,你必须考虑限制用户权限! 此外,通过这种方法,“坏人”可以通过这种方式执行另一个命令:SELECT ...; DROP TABLE ...;