【问题标题】:MYSQL restrict user access to information_schemaMYSQL 限制用户访问 information_schema
【发布时间】:2016-02-25 01:23:21
【问题描述】:

我有一个 MySQL 服务器(服务器版本:5.1.68-community;MySQL 客户端版本:5.0.51a)。有没有办法限制所有用户对 information_schema 的所有访问?

发生的情况是,一些客户网站经常通过 SQL 注入被黑客入侵,他们可以从 information_schema 表/视图中获取数据库结构。当然,我们需要更改 PHP 代码以防止 SQL 注入,但我仍然想限制对 information_schema 服务器范围的访问。

请指导我...提前谢谢

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    INFORMATION_SCHEMA 是一个虚拟数据库,其中包含有关当前用户可访问的所有数据库的元信息。 IE。它是根据用户的权限动态构建的。它不是真正的数据库。在任何情况下,您都应该尝试更改对它的权限 - 它会根据服务器的状态动态更新。

    所以你的问题没有什么意义。如果有人会危害某些用户并使用其权限获得系统控制权,他将能够根据定义访问该用户的INFORMATION_SCHEMA(因为该用户可以访问其权限允许的任何内容 - INFORMATION_SCHEMA 是“用户权限的投影”)。

    【讨论】:

    • 非常感谢您的快速回复。我的问题不在于有人损害了其他用户。但是使用 SQL 注入,任何人都可以将类似 ....%20union%20select%201,group_concat(table_name),3%20%20from%20information_schema.tables%20where%20table_schema=database() 的 sql 语句(取自我网站上发生的实际注入)注入 PHP 代码并获取当前数据库的结构。我完全理解必须修复 PHP 代码中的漏洞,但如果我们可以限制来自 information_schema 的所有用户的 SELECT 权限(至少),会更安全。
    • 您应该意识到:如果 SQL 注入 成功 - 那么没有办法阻止用户使用它自己的权限。 INFORMATION_SCHEMA 只是一个投影。如果用户有权访问某些表 - 那么即使不访问该数据库,他也会这样做。在你的情况下,他只会使用SHOW TABLES
    • 你说得对,我完全同意你的看法……关于样品注射,他们可以通过这个获取表格列表,然后进行另一次注射以获取数据,然后添加/编辑/删除这些表,我们会遇到麻烦。
    【解决方案2】:

    无法阻止对 information_schema 的访问(还), 但是在通过 GET 请求进行 sql 注入的情况下,很容易做到:

    RewriteCond %{REQUEST_FILENAME}   !handle_error\.php
    RewriteCond %{QUERY_STRING}   information_schema
    RewriteRule  ^(.*?)          /handle_error.php [R=301,L]
    

    在您的 .htaccess 中,这应该可以省去一些麻烦。

    【讨论】:

    • 那么如果我不想打开链接,我就在其中添加“information_schema”。示例:我在您的网站中使用“information_schema”作为我的昵称,并且其中包含我的昵称的任何链接都将被阻止。如果我把它也一样。另外,它对 POST 没有任何保护
    • 那是网站开发者的选择,你的用例可能从来没有遇到过,没有必要在查询字符串中显示带有昵称的页面。否则你是完全正确的,不能不同意。
    猜你喜欢
    • 2012-02-29
    • 2019-08-23
    • 1970-01-01
    • 2015-07-23
    • 2020-10-26
    • 2014-07-22
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    相关资源
    最近更新 更多