我有一个模块,用户可以使用MySQL语句创建报告。他们只需要使用SELECT语句。我用strpos("", $sSelect)
检查一下。有没有任何解决方案,我如何检查所有其他危险语句(如DROP, Replace, DELETE, TRUNCATE, ALTER,... etc.
)上的字符串。只允许SELECT。
格尔茨
答案 0 :(得分:2)
您是否可以为创建报告的人员更改MySQL用户权限?如果是这样,你可以限制访问SELECT栏的所有内容吧?您只需在创建报告时以此用户类型连接,并连接到普通用户帐户以获取其他所有内容。
答案 1 :(得分:0)
你可以使用正则表达式。
if (!preg_match('#^SELECT .*#i', ltrim($your_string))) {
// not allowed...
}
如果字符串不以SELECT语句开头(不区分大小写)执行某些操作......
但是,这不是最好的方法,你必须考虑限制用户权限!
此外,通过这种方法,“坏人”可以通过这种方式执行另一个命令:SELECT ...; DROP TABLE ...;