我有一个发布MySQL查询的表单。哪个是用PHP进一步处理的。我的问题是,如果用户键入'DROP DATABASE mydb',这将是一个大问题。所以,我想知道在发布查询之前是否有一种方法可以验证,以便用户不会损害任何其他数据库。我们可以肯定地使用正则表达式。但还有其他更好的方法吗?
谢谢
答案 0 :(得分:3)
不要用php(或正则表达式......或者除了数据库本身之外的其他任何东西)解析查询,看看它是否有害,因为这可能变得非常复杂(你不能只是过滤掉“坏话“²”。
为那些用户生成的查询和only grant privileges for things your users should be able to do(可能只有SELECT
,没有UPDATE
,DELETE
或表结构创建数据库用户会更好变化)。
²例如:SELECT 'DROP DATABASE is a bad thing' FROM mytable;
绝对可以,不会伤害任何东西。如果您只是在查询中查找“DROP DATABASE”,那么在这种情况下您只会烦扰用户......
答案 1 :(得分:1)
您允许用户直接输入要执行的原始查询。所以,这不属于SQL注入。
这里需要考虑的是mysql用户权限。对于该特定数据库用户(为此目的创建单独的用户)并且不授予他诸如删除,删除等权限。仅授予您愿意允许的权限。
http://dev.mysql.com/doc/refman/5.1/en/adding-users.html
https://kb.mediatemple.net/questions/788/HOWTO%3A+GRANT+privileges+in+MySQL#dv