网站SQL注入攻击防护服务器配置搭建
网站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注入攻击的风险。记住,安全是一个持续的过程,需要定期审查和更新防护措施。
页:
[1]