PHP中的MySQL查询验证

时间:2013-06-11 10:31:15

标签: php mysql validation

我有一个发布MySQL查询的表单。哪个是用PHP进一步处理的。我的问题是,如果用户键入'DROP DATABASE mydb',这将是一个大问题。所以,我想知道在发布查询之前是否有一种方法可以验证,以便用户不会损害任何其他数据库。我们可以肯定地使用正则表达式。但还有其他更好的方法吗?

谢谢

2 个答案:

答案 0 :(得分:3)

不要用php(或正则表达式......或者除了数据库本身之外的其他任何东西)解析查询,看看它是否有害,因为这可能变得非常复杂(你不能只是过滤掉“坏话“²”。
为那些用户生成的查询和only grant privileges for things your users should be able to do(可能只有SELECT,没有UPDATEDELETE或表结构创建数据库用户会更好变化)。

²例如: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

https://www.digitalocean.com/community/articles/how-to-create-a-new-user-and-grant-permissions-in-mysql