1.Nginx限流
NGINX 提供的限流模块主要是通过过 ngx_http_limit_req_module
和 ngx_http_limit_conn_module
模块来实现请求频率限制和连接数限制。
请求频率限流(Rate Limiting):使用 limit_req_zone
和 limit_req
指令来控制客户端请求的速率。
http {
# 定义一个限流区域,key 是 $binary_remote_addr(客户端IP),申请内存空间大小为10MB,每秒允许10个请求
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=10r/s;
server {
listen 80;
location / {
# 应用限流规则,burst 表示突发请求数,nodelay 表示不延迟处理,直接拒绝超出阈值部分的请求
limit_req zone=mylimit burst=20 nodelay;
proxy_pass http://backend;
}
}
}
连接数限流(Concurrent Connections Limiting):使用 limit_conn_zone
和 limit_conn
来限制客户端的最大并发连接数。
http {
# 定义连接限流区域,基于客户端 IP
limit_conn_zone $binary_remote_addr zone=connlimit:10m;
server {
listen 80;
location / {
# 同一时间最多允许每个IP有10个并发连接
limit_conn connlimit 10;
proxy_pass http://backend;
}
}
}
2.Waf
WAF(Web Application Firewall,中文:Web 应用防火墙)是一种专门用于保护 Web 应用程序的安全防护系统。它通过检测和拦截恶意 HTTP 请求,防止常见的 Web 安全漏洞被攻击者利用。
WAF 会对每一个进入的 HTTP 请求进行规则匹配,包括:URL、请求头(Headers)、请求体(Body)、Cookie、参数(Query String)。如果发现请求符合某个攻击特征或规则,则采取动作:阻断请求(Block)、记录日志(Log)、放行(Allow)、重定向(Redirect)。
WAF 主要用于防御以下类型的攻击:
1. SQL 注入(SQL Injection):请求参数直接作为SQL查询条件。
- 攻击者通过构造恶意输入绕过数据库查询逻辑,获取或篡改数据库内容。
- WAF 可识别并拦截包含 SQL 特征的请求。
-- 用户名:' OR '1'='1 密码:' OR '1'='1 解释:查询SQL时条件 = '参数'
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = '' OR '1'='1'
-- 这段 SQL 的逻辑就变了 —— 它不再是一个验证用户名和密码的过程,而变成了 1 = 1 一个永远为真的条件!
解决办法2:占位符避免SQL注入。
2. 跨站脚本攻击(XSS)
- 攻击者在网页中注入恶意脚本,当其他用户访问时执行,窃取 Cookie、会话信息等。
- WAF 能识别并过滤掉包含 JavaScript、HTML 标签等危险内容的请求。
3. 跨站请求伪造(CSRF)
- 利用用户已登录的身份,诱导其点击链接执行非预期的操作。
- WAF 可检查
Referer
头、验证请求来源等方式进行防御。
4. 命令注入(Command Injection)
- 攻击者尝试在参数中插入系统命令,如
; rm -rf /
,让服务器执行。 - WAF 可识别并阻止这类非法字符或命令模式。
5. 文件包含漏洞(Local/Remote File Inclusion)
- 攻击者试图读取服务器上的任意文件或远程资源。
- WAF 可识别路径穿越(如
../
)或远程 URL 包含行为。
6. DDoS 攻击(部分场景)
- 针对 HTTP 层的 DDoS 攻击(如 CC 攻击),WAF 可以结合限流机制限制单 IP 请求频率,缓解攻击影响。
7. 敏感信息泄露
- 检测是否返回了敏感信息(如错误堆栈、数据库结构等),并可自动脱敏或阻断响应。