SQL注入攻击的核心是利用程序对用户输入的过滤漏洞,拼接恶意SQL语句操作数据库。除了在应用代码中做好参数校验、使用预编译语句等防护措施,调整数据库服务的监听范围也是从网络层降低攻击风险的重要手段。如果数据库服务默认监听所有网络接口,一旦被攻击者扫描到开放端口,就可能成为注入攻击的目标,因此合理限制监听范围是数据库安全配置的基础环节。

为什么限制数据库监听范围能防SQL注入
数据库服务如果监听在0.0.0.0地址,意味着所有能访问到该服务器公网或内网IP的请求,都可以尝试连接数据库端口。攻击者可以通过端口扫描发现开放的数据库服务,再结合弱密码、SQL注入漏洞发起攻击。而限制监听范围后,数据库仅接收来自指定IP或本地回环地址的请求,相当于在网络层给数据库加了一层访问限制,即使应用存在SQL注入漏洞,攻击者也无法从外部直接连接数据库执行恶意操作。
常见数据库的限制监听配置方法
MySQL/MariaDB配置调整
MySQL的监听配置在my.cnf(Linux)或my.ini(Windows)配置文件中,默认配置下bind-address参数可能未设置或设置为0.0.0.0。我们需要修改该参数限制监听地址:
# 仅监听本地回环地址,仅允许本机应用连接数据库 bind-address = 127.0.0.1 # 如果需要允许指定内网IP连接,可以设置为对应IP # bind-address = 192.168.0.100 # 也可以注释掉bind-address参数,部分版本默认仅监听本地
修改完成后需要重启MySQL服务使配置生效,Linux系统执行命令:
systemctl restart mysqld # 或者 service mysql restart
PostgreSQL配置调整
PostgreSQL的监听配置在postgresql.conf文件中,核心参数是listen_addresses:
# 仅监听本地回环地址 listen_addresses = 'localhost' # 允许监听多个指定IP,用逗号分隔 # listen_addresses = 'localhost,192.168.0.100' # 禁止监听所有地址,不要设置为 '*'
同时还需要检查pg_hba.conf文件,确认访问规则仅允许可信IP连接,修改后重启PostgreSQL服务:
systemctl restart postgresql
SQL Server配置调整
SQL Server可以通过SQL Server配置管理器调整监听设置:
- 打开SQL Server配置管理器,展开
SQL Server 网络配置 - 选择对应实例的协议,右键点击TCP/IP,选择属性
- 在协议选项卡中,将
已启用设置为是 - 在IP地址选项卡中,将所有IP的
TCP 动态端口清空,TCP 端口设置为需要开放的端口,然后将不需要监听的IP的活动设置为否,仅保留需要监听的IP地址,比如127.0.0.1和指定的内网IP - 重启SQL Server服务使配置生效
配置注意事项
首先,修改监听配置前需要确认应用和数据库的部署架构,如果应用和数据库部署在不同服务器,需要将bind-address设置为数据库服务器的内网IP,同时在应用服务器的访问规则中允许该IP的连接,避免配置后应用无法连接数据库。
其次,限制监听范围只是防护SQL注入的辅助手段,不能替代代码层的防护。仍然需要在应用中使用预编译语句、对用户输入做严格校验,避免直接将用户输入拼接到SQL语句中。另外,还需要配合强密码策略、定期更新数据库补丁、限制数据库账户权限等措施,构建完整的安全防护体系。
最后,配置完成后可以通过netstat命令验证监听状态,确认数据库仅监听指定的IP地址:
# 查看MySQL默认3306端口的监听情况 netstat -tuln | grep 3306 # 正确输出应为 127.0.0.1:3306 或指定IP:3306,而不是 0.0.0.0:3306