Php 如何检查MySQL SELECT字符串是否仅存在SELECT?
我有一个模块,用户可以使用MySQL语句创建报表。他们只需要使用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语句开头(不区分大小写),请执行某些操
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用户和权限来控制。这是肯定的。。。但即使这是一个错误的问题,我也不认为这是一个错误的答案:它有效!也许这不是最好的方法,但它确实有效!无论如何没问题!:)一个好的答案指出这是一个错误的问题,它不会给一个坏的问题正确的答案。