|
|
网站SQL注入攻击防护服务器配置指南
基础防护措施
1. 输入验证与过滤
- 服务器端验证:在服务器端对所有用户输入进行严格验证
- 白名单过滤:只允许特定格式的输入(如数字、特定字符集)
- 转义特殊字符:对输入中的单引号、双引号、分号等特殊字符进行转义处理
2. 参数化查询/预处理语句
- 使用参数化查询而非字符串拼接SQL语句
- 示例(PHP PDO):
- $stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');
- $stmt->execute(['email' => $input_email]);
复制代码
服务器配置防护
Web服务器配置
Apache配置- # 启用mod_security(Web应用防火墙)
- LoadModule security2_module modules/mod_security2.so
- # 示例规则 - 阻止常见SQL注入模式
- <IfModule mod_security2.c>
- SecRuleEngine On
- SecRule ARGS "@rx (union.*select|concat.*\(|information_schema|sleep\(\d+\)|benchmark\(.+\,.+\))" \
- "id:'1001',phase:2,t:none,block,msg:'Possible SQL Injection Attempt'"
- </IfModule>
复制代码
Nginx配置- # 使用ngx_http_modsecurity_module(需编译时包含)
- # 或通过第三方模块如NAXSI实现类似功能
- # 示例:限制可疑请求
- location / {
- # ...其他配置...
- if ($query_string ~* "union.*select|concat.*\(|information_schema|sleep\(\d+\)") {
- return 403;
- }
- }
复制代码
数据库服务器配置
MySQL/MariaDB- -- 限制数据库用户权限
- GRANT SELECT, INSERT, UPDATE, DELETE ON database.* TO 'user'@'host';
- -- 不要授予FILE、PROCESS、SUPER等危险权限
- -- 启用SQL模式限制
- SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
复制代码
PostgreSQL- -- 限制用户权限
- REVOKE ALL ON SCHEMA public FROM PUBLIC;
- GRANT USAGE ON SCHEMA public TO web_user;
- -- 配置pg_hba.conf限制访问来源
复制代码
高级防护措施
1. Web应用防火墙(WAF)
- 部署商业WAF如F5 ASM、Imperva或开源WAF如ModSecurity
- 配置规则拦截常见SQL注入模式
2. 定期安全扫描
- 使用工具如sqlmap定期测试网站是否存在SQL注入漏洞
- 部署自动化漏洞扫描器
3. 错误处理配置
4. 最小化数据库暴露
- 数据库不应直接暴露在公网
- 使用VPN或SSH隧道访问数据库
监控与日志
- 启用详细的数据库和Web服务器日志
- 配置日志分析工具检测可疑模式
- 设置实时警报机制
定期维护
- 及时更新所有软件组件(Web服务器、数据库、应用框架)
- 定期审查和更新安全规则
- 进行渗透测试和安全审计
通过以上多层防护措施,可以显著降低网站遭受SQL注入攻击的风险。记住,安全是一个持续的过程,需要定期审查和更新防护措施。 |
|