admin 发表于 2026-8-13 01:20:11

网站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]
查看完整版本: 网站SQL注入攻击防护服务器配置搭建