跳转到内容

网络安全场景

Web 应用防火墙(WAF)作为应用层面的重要防御手段,主要用于抵御针对 Web 应用程序的各类攻击,尤其擅长处理 OWASP Top 10 中列出的常见威胁。

WAF 通过以下机制提供防护:

  • 流量检测与过滤:实时分析 HTTP/HTTPS 流量,识别并拦截恶意请求。
  • 协议合规性检查:确保请求符合 HTTP 协议标准。
  • 攻击特征库匹配:基于已知攻击模式(如 SQL 注入、跨站脚本 XSS、文件包含等)进行识别。
  • 会话管理与异常行为检测:监测用户会话,发现异常操作。
  • SQL 注入 (SQLi):阻止恶意构造的 SQL 语句,防止数据库被非法访问或篡改。
  • 跨站脚本 (XSS):过滤用户输入,防止恶意脚本在用户浏览器中执行。
  • 跨站请求伪造 (CSRF):通过验证 Referer、Token 等机制,防止用户在不知情的情况下执行恶意操作。
  • 文件上传漏洞:限制可上传文件的类型和大小,防止恶意文件被上传执行。
  • 命令注入:拦截可能执行系统命令的恶意输入。

API 是现代应用的核心交互方式,其安全性至关重要。API 防护主要关注认证、功能授权和数据授权三个层面。

认证机制用于验证用户或客户端的身份。

  • AccessToken 与 RefreshToken
    • AccessToken:短期有效的访问凭证,用于访问受保护资源。通常通过 HTTP Header (Authorization: Bearer <token>) 传递。
    • RefreshToken:长期有效的刷新凭证,用于在 AccessToken 过期后获取新的 AccessToken,而无需用户重新登录。
    • RefreshToken 轮转策略:为增强安全性,推荐实施 RefreshToken 轮转。即每当使用 RefreshToken 获取新的 AccessToken 时,旧的 RefreshToken 立即失效,并颁发一个新的 RefreshToken。这可以有效防止 RefreshToken 被盗用后长期有效的问题。
    • JWT (JSON Web Token):作为 AccessToken 的常见实现,包含用户身份信息和过期时间,通过签名保证其完整性和防篡改性。
  • 其他认证方式:API Key、Basic Auth、OAuth2 授权码模式等,需根据场景选择。

2.2. 功能授权 (Functional Authorization)

Section titled “2.2. 功能授权 (Functional Authorization)”

功能授权决定了已认证的用户可以执行哪些操作。

  • 基于角色的访问控制 (RBAC - Role-Based Access Control)
    • 将权限分配给角色,用户被授予一个或多个角色。
    • 优点:管理简单,适用于权限模型相对固定的场景。
    • 示例:管理员角色拥有“创建、读取、更新、删除”用户权限;普通用户角色仅拥有“读取”个人信息权限。
  • 基于属性的访问控制 (ABAC - Attribute-Based Access Control)
    • 权限判断基于主体、客体、操作和环境等多种属性。
    • 优点:灵活性高,可实现细粒度的动态权限控制,适用于复杂多变的业务场景。
    • 示例:只有部门经理 (subject.role=manager) 才能审批金额超过 [脱敏金额] (object.amount > [脱敏金额]) 的请假申请 (action=approve),且必须在工作时间 (environment.time=working_hours)。

2.3. 数据授权 (Data Authorization / 数据级权限控制)

Section titled “2.3. 数据授权 (Data Authorization / 数据级权限控制)”

数据授权确保用户只能访问其有权查看或操作的特定数据实例。这通常需要更深入地集成到业务逻辑中。

  • 实现方式
    • 网关层过滤:在 API 网关层面,根据用户身份信息对请求进行初步的数据范围校验或动态注入数据过滤条件(例如,为 SQL 查询添加 WHERE user_id = [当前用户ID])。
    • 业务代码拦截与过滤:在后端服务中,通过 Interceptor、AOP 或业务逻辑层面的判断,确保数据操作的合法性与可见性。例如,用户只能看到自己创建的订单,或属于其所属部门的数据。
    • 行级安全 (Row-Level Security, RLS):数据库层面的特性,允许根据用户角色或属性限制对表中特定行的访问。
    • 字段级安全 (Field-Level Security, FLS):控制用户对数据表中特定字段的访问权限。

自动化工具和恶意爬虫对业务造成的影响日益严重,防刷机制旨在识别并阻止非人类或恶意的高频访问。

  • 速率限制 (Rate Limiting)
    • 限制单位时间内来自特定 IP、用户或 API Key 的请求次数。
    • 目的:防止暴力破解、DDoS 攻击、滥用 API 接口等。
    • 实现:Nginx、API Gateway、服务内部代码等。
  • 人机识别 (Human-Bot Verification)
    • CAPTCHA/reCAPTCHA:通过图像识别、行为分析等方式区分人类和机器人。
    • 行为分析:分析用户操作轨迹、请求头、鼠标键盘事件等,识别非人类行为模式。
    • 设备指纹:收集浏览器、操作系统、网络等信息,生成唯一设备 ID。
  • 认证与鉴权 (Authentication & Authorization)
    • 对于需要用户身份的操作,强制要求认证和鉴权。未认证的请求往往更容易成为攻击目标。
    • 限制未认证用户的访问范围和频率。
  • 限流与熔断 (Throttling & Circuit Breaking) - 兜底策略
    • 限流 (Throttling):当系统负载过高时,拒绝一部分请求,保护核心服务不被压垮。
    • 熔断 (Circuit Breaking):当某个依赖服务出现故障时,快速失败,避免雪崩效应,保护自身服务。作为防刷的最终兜底手段,防止系统因过载而完全崩溃。

敏感数据(如 API Key、数据库凭证、支付信息等)的存储和传输是安全的核心。

  • 后端转发、边缘转发等安全通道
    • 敏感信息不应直接暴露给客户端(浏览器、移动应用),而应通过安全的后端服务进行转发或处理。
    • 例如,第三方支付 API 的调用应在后端完成,而非前端直接携带密钥发起请求。
    • 在边缘(如 CDN、API 网关)进行敏感数据加密、脱敏处理,确保传输安全。
  • 完整的授权机制与最小权限原则
    • 访问机密信息的服务或组件必须拥有严格的授权,并遵循最小权限原则,即只授予完成任务所需的最低权限。
    • 定期审查和更新凭证。
    • 使用秘密管理服务 (Secret Management Service) 集中存储和管理机密信息。
  • 加密存储与传输
    • 数据库中存储的敏感数据应加密。
    • 传输过程中使用 TLS/SSL 加密,确保数据在网络中的机密性。