1

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

谢谢

4

2 回答 2

3

不要使用 php(或正则表达式......或数据库本身以外的任何其他内容)解析查询以查看它是否会做有害的事情,因为这可能会变得非常复杂(你不能只过滤掉“坏词” ²)。
最好为那些用户生成的查询创建一个数据库用户,并且只授予用户应该能够做的事情的权限(可能只有SELECTs、没有UPDATEs、DELETEs 或表结构更改)。

²例如:SELECT 'DROP DATABASE is a bad thing' FROM mytable;绝对没问题,不会伤害任何东西。如果您只是在查询中查找“DROP DATABASE”,那么在这种情况下您只会惹恼用户......

于 2013-06-11T10:34:46.377 回答
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

于 2013-06-11T10:36:23.583 回答