-2

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

格雷茨

4

2 回答 2

2

您是否可以更改创建报告的人的 MySQL 用户权限?如果是这样,您可以限制对 SELECT 栏的所有内容的访问?您只需要在创建报告时以该用户类型连接,并连接到您的普通用户帐户以进行其他所有操作。

于 2012-10-24T15:23:31.167 回答
0

你可以使用正则表达式。

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

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

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

于 2012-10-24T15:23:12.480 回答