我有一个MySQL服务器(服务器版本:5.1.68-community;MySQL客户端版本:5.0.51a)。是否有任何方法可以限制所有用户对information_schema的访问?
现在的情况是,一些客户网站经常遭受SQL注入攻击,并且攻击者可以从information_schema表/视图中获取数据库结构。当然,我们需要更改PHP代码以防止SQL注入,但仍然希望在整个服务器范围内限制对information_schema的访问。
请指导我...提前致谢。
INFORMATION_SCHEMA
是一个虚拟数据库,它保存当前用户可以访问的所有数据库的元信息。也就是说,它根据用户的权限动态构建。它不是真正的数据库。您不应尝试在任何情况下更改对其的权限——它会根据服务器状态动态更新。
因此,您的问题有点没有意义。如果某个人通过某个用户攻击系统并获得了系统控制权和该用户的权限,这个人将能够按定义访问该用户的INFORMATION_SCHEMA
(因为该用户可以访问其权限允许的任何东西——INFORMATION_SCHEMA
是用户权限的"投影")。
目前还无法防止访问information_schema,但在通过GET请求进行SQL注入的情况下,很容易执行以下操作:
RewriteCond %{REQUEST_FILENAME} !handle_error\.php
RewriteCond %{QUERY_STRING} information_schema
RewriteRule ^(.*?) /handle_error.php [R=301,L]
INFORMATION_SCHEMA
仅是一个投影。如果用户已经可以访问某些表 - 即使没有访问该数据库,他也会这样做。在您的情况下,他只需使用SHOW TABLES
即可。 - Alma Do