【问题标题】:Prevent direct access to database防止直接访问数据库
【发布时间】:2013-11-06 06:43:06
【问题描述】:

我正在考虑一种保护 PHP 应用程序的方法。我想在数据库服务器端(MySQL)设置一个权限有限的用户,并在 PHP 应用程序中为所有数据库请求配置这个用户。

现在的问题是可以访问源文件的人(例如员工)可以使用配置的凭据直接连接到数据库(例如通过 phpmyadmin)。只能通过 PHP 应用程序更新数据库。

我想建立一个机制(触发器或任何可能在 mysql 端或 php 端或两者兼而有之)来检查对数据库的请求来自哪个客户端,从而忽略它。有可能这样做吗?还有其他方法可以考虑这个问题吗?

问候

【问题讨论】:

  • 如果您确保相关用户没有任何他们无法在网站本身上使用的权限,那么如果有人获得登录信息会有什么问题?
  • 您可以限制对例如 SomeUser@localhost 的访问,从而阻止来自服务器外部的访问。但是,如果有人对服务器上的 PHPMyAdmin 具有合法访问权限,则 MySQL 无法判断作为 SomeUser@localhost 的访问是否合法。
  • @Evan 该应用程序有一个配置文件,其中包含用于连接数据库以进行 CRUD(登录名、密码)的凭据。有人可以读取此文件并使用该信息绕过应用程序并访问数据库。在这种情况下,我想否认任何修改。
  • 谢谢迈克,我明白了。所以我想的是不可能的!

标签: php mysql security


【解决方案1】:

现在的问题是可以访问源文件的人(例如员工)可以使用配置的凭据直接连接到数据库(例如通过 phpmyadmin)。

这不是您可以完全防止的事情。如果有人可以访问源文件,那么无论如何你都完蛋了。

创建一些保护的通常做法是

  • 以无法从服务器外部访问的方式配置 mySQL。请参阅Restricting MySQL connections from localhost to improve security,它也应该在防火墙级别完成(与系统管理员交谈)

  • 让 Web 应用程序使用数据库用户帐户,该帐户在访问应用程序需要运行的任何表和功能时受到限制。

【讨论】:

  • +1 唯一警告:员工可能会从(例如)Git 存储库访问源代码,但密码仍然是特定于环境的,它存储在仅位于服务器。在这种情况下,员工必须有权访问实时服务器,而不仅仅是源
【解决方案2】:

如果您需要设置某个用户可以登录的域,您可以在授予该用户权限时指定:

GRANT ALL PRIVILEGES on yourdatabase.* TO 'username'@'192.168.10.12' 由“goodsecret”标识;

这会将连接限制为 192.168.10.12,即使从其他位置提供密码也不适合此授权命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 2019-01-25
    • 2010-11-05
    • 2010-09-16
    相关资源
    最近更新 更多