
1) 【一句话结论】在网络安全场景下设计API安全防护,需采用“输入验证+输出编码+权限控制+限流防攻击”的多层防御体系,通过技术手段(如参数化查询、HTML实体编码、RBAC权限模型、限流算法、CDN+WAF)结合策略实现,从输入到输出、从权限到流量全方位防护,防止SQL注入、XSS、越权及DDoS攻击。
2) 【原理/概念讲解】
' OR 1=1 --会绕过验证,导致所有数据被查询)。3) 【对比与适用场景】
| 防护措施 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 输入验证(白名单) | 仅允许符合规则的输入(如正则匹配手机号) | 严格过滤非法字符 | SQL注入、XSS | 需覆盖常见攻击模式,避免遗漏合法输入 |
| 输出编码(HTML实体) | 将特殊字符转为HTML实体(如<→<) | 防止脚本执行 | XSS | 需对所有用户输出进行编码,包括日志 |
| RBAC权限控制 | 基于角色的访问控制,绑定用户角色与权限 | 权限隔离 | 越权 | 需动态检查请求中的权限标识(如token中的角色) |
| 限流(令牌桶) | 按速率生成令牌,请求消耗令牌 | 防滥用、防资源耗尽 | API限流 | 令牌速率需合理,避免影响正常用户 |
| DDoS防御(CDN+WAF) | CDN分发流量,WAF过滤恶意请求 | 负载均衡+攻击过滤 | DDoS | 需结合业务流量特征,避免误判正常请求 |
4) 【示例】
# 正确:参数化查询
query = "SELECT * FROM users WHERE id = ?"
result = db.execute(query, [user_id]).fetchall()
# 错误:拼接字符串(易受注入)
query = f"SELECT * FROM users WHERE id = '{user_id}'"
# 输出用户输入时编码
user_input = "<script>alert('XSS')</script>"
safe_output = html.escape(user_input) # 转为 <script>...
response.write(safe_output)
# 检查用户角色是否允许访问
if request.user.role != "admin" and request.path == "/admin/data":
return 403, "无权限访问"
# 执行业务逻辑
# 令牌桶实现(每秒生成5个令牌)
from collections import deque
class TokenBucket:
def __init__(self, rate, capacity):
self.rate = rate # 每秒生成令牌数
self.capacity = capacity # 桶容量
self.tokens = capacity
self.last_time = time.time()
def consume(self, tokens=1):
now = time.time()
elapsed = now - self.last_time
self.tokens = min(self.capacity, self.tokens + elapsed * self.rate)
self.last_time = now
if self.tokens >= tokens:
self.tokens -= tokens
return True
return False
# 请求处理时检查
bucket = TokenBucket(rate=5, capacity=10)
if not bucket.consume():
return 429, "请求过快,请稍后重试"
# 正常请求(CDN转发)
GET /api/user/profile HTTP/1.1
Host: api.example.com
# WAF过滤恶意请求(如CC攻击)
GET /api/user/profile?param=...¶m=... (重复参数,WAF识别为CC攻击)
5) 【面试口播版答案】
“在网络安全场景下设计API安全防护,核心是构建多层防御体系。首先,针对SQL注入,采用参数化查询(如ORM的预编译语句),避免拼接字符串;针对XSS,对用户输入进行HTML实体编码,防止脚本执行;针对越权访问,通过RBAC模型动态检查用户权限(如token中的角色标识);然后,API限流用令牌桶算法控制请求频率,防止资源耗尽;防DDoS则结合CDN分发流量和WAF过滤恶意请求(如CC攻击)。这些措施从输入验证、输出编码、权限控制到流量管理,全方位保障API安全。”
6) 【追问清单】
?或:占位符),避免字符串拼接。7) 【常见坑/雷区】