我听说任何知道我的 MySQL 用户名和密码的人都可以访问它,即使它只收听localhost。
假设我的信息如下:
USER: root
PASS: 123456
Host: LOCALHOST (only)
那里的任何人(本地)怎么可能访问它?
如果您将远程主机的访问限制为您的用户名和密码,那么某人将无法从外部访问数据库。
您还可以将防火墙配置为仅允许从 localhost 机器到 3306(MySQL 默认端口)的流量。
更新
要设置您的用户,以便他们只能通过 LOCALHOST 访问,请使用:
GRANT ALL PRIVILEGES ON *.* TO db_user @'localhost' IDENTIFIED BY 'db_passwd';
GRANT ALL PRIVILEGES ON *.* TO db_user @'127.0.0.1' IDENTIFIED BY 'db_passwd';
此外,将您的 MySQL 服务器绑定到本地地址。您可以通过编辑以下[mysqld]
部分来做到这一点my.cnf
:
[mysqld]
bind-address = 127.0.0.1
这是我偶然发现的一个较老的问题,但如果 Darkeden 运行了 phpMyAdmin 或类似的运行,任何人都可以使用有效的 MySQL 凭据登录。
如果它被泄露,那么除了限制连接外,还要更改所有密码。
您可以在防火墙或 MySQL 本身中阻止对 MySQL 的直接访问,但最有可能被黑客入侵的方式是通过不安全的 Web 应用程序 - 在这种情况下,攻击者很可能能够读取您的数据库登录名并从服务器。
因此,请确保您的应用程序安全 - 保持一切更新,不允许文件上传,如果您有多个帐户,请使用 suPHP 等。
如果您限制您的 mysql 应用程序,请按照以下步骤操作:
1.您可以只阻止端口 3306。如果站点在同一台服务器上,那么它仍然可以使用 localhost 作为主机名访问数据库。
2.只需将“bind-address = 127.0.0.1”添加到他们的 my.cnf 文件的“[mysqld]”部分,以限制仅访问本地主机。
大多数人使用这种类型的限制。
我没有看到回答他(调整后的)问题的答案 - 他已将其锁定到 localhost 并且攻击者仍在进入。
如果您确实将其限制为本地主机(使用 netstat -an | egrep 3306 检查它正在侦听 127.0.0.1 而不是 0.0.0.0), 那么访问它的唯一方法是从该本地主机发起连接。
初步采取的步骤:
他也可以通过使用:
通过您正在运行的某个程序(例如 Web 服务器)进行访问,该程序可从外部访问,并且有一个安全漏洞,允许他通过其现有的数据库连接运行任意 sql 命令 - 请参阅https://www.w3schools.com/sql/sql_injection .asp
欺骗他可以从外部访问的某些程序,以代理他到 localhost:3306 的连接(例如,通过机器上配置错误的网络防火墙)
欺骗某些程序运行本地程序(bash.mysql 等),然后从那里获得对数据库的访问权限 - 缓冲区溢出和其他特制数据是运行任意代码的常见问题
中间人攻击具有合法访问权限的连接
自动或手动处理来自外部的数据的程序中的错误,例如电子邮件,使用脚本处理处理 postscript/pdf/任何文档 - 即使查看文本文件也可能很危险 - 请参阅https://www.proteansec.com/linux /blast-past-executing-code-terminal-emulators-via-escape-sequences/
社会工程是一种让人们为您提供访问权限的方法
设法将硬件设备连接到可以访问的计算机上(有多少人会拿起一个躺在工作停车场的“记忆棒”并检查它而不是“可编程键盘”,并且所有计算机都信任键盘!)
然后还有更多我不知道的所有其他类型的方法,但是所涉及的方法共享...
请记住,您需要有实际的安全性,我认为 xkcd 说得恰到好处:https ://xkcd.com/538/