Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何检查MySQL SELECT字符串是否仅存在SELECT?_Php_Mysql_Select - Fatal编程技术网

Php 如何检查MySQL SELECT字符串是否仅存在SELECT?

Php 如何检查MySQL SELECT字符串是否仅存在SELECT?,php,mysql,select,Php,Mysql,Select,我有一个模块,用户可以使用MySQL语句创建报表。他们只需要使用SELECT语句。我使用strpos(“,$sSelect)检查它。是否有任何解决方案,我如何检查所有其他危险语句的字符串(如删除、替换、删除、截断、更改等)。只允许选择 Greetz您可以使用正则表达式 if (!preg_match('#^SELECT .*#i', ltrim($your_string))) { // not allowed... } 如果字符串不是以SELECT语句开头(不区分大小写),请执行某些操

我有一个模块,用户可以使用MySQL语句创建报表。他们只需要使用SELECT语句。我使用
strpos(“,$sSelect)
检查它。是否有任何解决方案,我如何检查所有其他危险语句的字符串(如
删除、替换、删除、截断、更改等
)。只允许选择

Greetz

您可以使用正则表达式

if (!preg_match('#^SELECT .*#i', ltrim($your_string))) {
    // not allowed...
}
如果字符串不是以SELECT语句开头(不区分大小写),请执行某些操作

<>但是,这不是最好的方式,你必须考虑限制用户权限!
除此之外,“坏人”还可以用这种方式执行另一个命令:
SELECT。。。;放下桌子

您是否可以为创建报表的人员更改MySQL用户权限?如果是这样的话,你就可以限制对所有东西的访问吧?在创建报告时,您只需以此用户类型连接,并连接到您的普通用户帐户即可完成其他所有操作。

我认为仅搜索
select
的位置不是一个好主意…@JordanRichards-MySQL绝对不受欢迎。PHP mysql_*API已被弃用,但OP没有提到使用它。@markus tharkun哦,是的,对不起。我一直在犯这个错误。这绝对是必须的,而且你还需要确保这个数据库用户只能访问某个表!问题是你回答错了问题。这不能通过尝试解析查询来解决,这永远都不够好,必须通过适当的mysql用户和权限来控制。这是肯定的。。。但即使这是一个错误的问题,我也不认为这是一个错误的答案:它有效!也许这不是最好的方法,但它确实有效!无论如何没问题!:)一个好的答案指出这是一个错误的问题,它不会给一个坏的问题正确的答案。