一、SQL注入攻击防御
SQL注入是通过恶意输入篡改数据库查询逻辑的攻击方式,可能导致数据泄露或数据库破坏。防御核心在于隔离用户输入与SQL代码,具体措施包括:
- 参数化查询(预编译语句)
-
原理:将SQL语句与用户输入参数分离,数据库将输入视为数据而非代码执行。
-
实现示例(C#):
csharpusing (var cmd = new SqlCommand("SELECT * FROM Users WHERE ID = @id", conn)) { cmd.Parameters.Add("@id", SqlDbType.Int).Value = inputId; cmd.ExecuteNonQuery(); }
-
优点:完全防止注入,支持类型检查与长度验证。
-
- 输入验证与过滤
- 白名单验证:仅接受预期格式(如数字、特定字符范围)。
- 黑名单过滤:移除特殊字符(如
'
、;
、--
)和敏感关键词(如DROP
)。 - 转义处理:对特殊字符(如单引号)进行转义,但需注意不同数据库的转义规则。
- 最小权限原则
- 为数据库用户分配仅执行必要操作的权限(如禁止
DROP
或ALTER
),限制攻击者破坏范围。
- 为数据库用户分配仅执行必要操作的权限(如禁止
- 使用ORM框架
- ORM(如Hibernate、Entity Framework)自动处理SQL生成,减少手动拼接风险。
- Web应用防火墙(WAF)
- 部署WAF拦截恶意请求(如包含
DROP
的输入),提供额外防护层。
- 部署WAF拦截恶意请求(如包含
二、XSS(跨站脚本攻击)防御
XSS通过注入恶意脚本窃取用户信息或劫持会话,防御需阻断非法脚本执行:
-
输入过滤与白名单
- 对用户输入的HTML、JavaScript内容进行严格过滤,仅允许安全标签(如
、
)和属性。
- 对用户输入的HTML、JavaScript内容进行严格过滤,仅允许安全标签(如
-
输出编码
- 根据输出上下文(HTML、JavaScript、URL)对动态内容进行编码:
- HTML编码:
<
→<
,>
→>
。 - JavaScript编码:使用
encodeURIComponent()
或库(如OWASP Java Encoder
)。
- HTML编码:
- 根据输出上下文(HTML、JavaScript、URL)对动态内容进行编码:
-
CSP(内容安全策略)
-
通过HTTP头限制脚本来源,禁止内联脚本和外部域名加载:
httpContent-Security-Policy: default-src 'self'; script-src 'unsafe-inline' 'unsafe-eval' ```。
-
-
Cookie安全属性
- 设置
HttpOnly
(禁止JavaScript访问)和Secure
(仅HTTPS传输)属性,防止CSRF和XSS窃取Cookie。
- 设置
三、CSRF(跨站请求伪造)防御
CSRF通过诱导用户提交恶意请求篡改数据,防御需验证请求合法性:
-
CSRF Token
-
为每个表单生成唯一Token,服务端验证请求Token与会话Token一致性:
html```。
-
-
SameSite Cookie属性
-
设置Cookie的
SameSite=Strict
或Lax
,阻止跨站请求携带Cookie:httpSet-Cookie: session_id=xxx; SameSite=Lax ```。
-
-
Referrer检查
- 验证HTTP请求的
Referer
头是否来自可信域名。
- 验证HTTP请求的
四、DDoS(分布式拒绝服务)防御
DDoS通过海量请求耗尽资源,需结合流量清洗与架构优化:
- 流量清洗服务
- 使用云服务商(如AWS Shield、Cloudflare)的清洗中心过滤恶意流量。
- 限流与熔断
- 通过API网关(如Nginx、Kong)限制单IP请求频率,或使用熔断机制(如Hystrix)隔离故障服务。
- 负载均衡与分布式架构
- 部署多可用区集群,结合DNS轮询或加权负载均衡分散流量。
- CDN加速与缓存
- 利用CDN缓存静态资源,减少源站压力。
五、总结与选型建议
攻击类型 | 核心防御措施 | 适用场景 |
---|---|---|
SQL注入 | 参数化查询、输入验证、WAF | 数据库交互频繁的Web应用 |
XSS | 输出编码、CSP、Cookie安全属性 | 用户输入动态内容的页面 |
CSRF | CSRF Token、SameSite Cookie | 需要用户提交敏感操作的表单 |
DDoS | 流量清洗、限流、分布式架构 | 高流量、高可用性要求的系统 |
关键实践:
- 安全开发流程:将安全审查(如SAST/DAST)融入CI/CD管道。
- 日志与监控:记录异常请求,结合IDS/IPS实时告警。
- 定期演练:模拟攻击(如渗透测试),验证防御有效性。
通过多层防御(如参数化查询+WAF+输入验证)和纵深防御策略,可显著降低攻击风险。