【问题标题】:Prevent database from external access防止数据库被外部访问
【发布时间】:2016-06-13 11:06:55
【问题描述】:

我用 MySQL 和 PHP 创建了一个家庭 Apache 服务器。我刚刚创建了一个我想公开访问的网站,主要是为了我的实验。但是我刚刚意识到我的 MySQL 服务器在端口 3306 上运行,通常我的 PHP 使用用户名和无密码连接到 localhost 上的数据库。任何其他远程 PHP 脚本都不能连接到我的数据库并虹吸掉所有存储的数据吗?它不会危及我的网站吗?如何停止与我的数据库服务器的远程连接?我只希望我的服务器上的应用程序(或我批准的应用程序)访问我的数据库。如果措辞不好,请见谅,我在 Google 上找不到任何有用的文章。

【问题讨论】:

  • 编辑 my.cnf: bind-address = 127.0.0.1 并重启 MySQL。使其仅对 localhost 可用。
  • 您应该检查您的 MySQL 服务器正在侦听的 IP 地址以及您的防火墙设置,但要回答“我只希望我的服务器上的应用程序(或我批准的应用程序)访问我的数据库”:这就是您可以使用密码创建用户的原因——使用它!
  • iptables 还应该帮助您阻止传入数据库连接的任何可能性

标签: php mysql apache


【解决方案1】:

您可以按照 cmets 中的建议,使用 bind-address = 127.0.0.1 配置选项将 MySQL 服务器限制为仅侦听 localhost 连接。

如果您只想为该特定用户进行更改,您可以使用以下查询检查授权:

SHOW GRANTS FOR CURRENT_USER;

如果不仅限于localhost,你可以限制它:

GRANT ALL PRIVILEGES ON *.* TO <username> @'localhost' IDENTIFIED BY '<password>';
GRANT ALL PRIVILEGES ON *.* TO <username> @'127.0.0.1' IDENTIFIED BY '<password>';

一般来说,我建议您添加密码,因为您可以在将来进行一些其他配置更改或使用相同的 MySQL 服务器运行其他应用程序。安全总比后悔好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-08
    • 2013-11-06
    • 2020-03-22
    • 2017-02-08
    • 1970-01-01
    • 2020-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多