返回知识库

安全测试实战手册

不靠“扫一遍工具”碰运气,而是从攻击面、权限边界和业务风险出发,验证系统是否真正守得住。

10 个章节Web + API适用于测试、开发与产品负责人
🛡️

安全测试的目标

保护资产,而非刷漏洞数

先问:我们到底在保护什么?

安全测试的核心不是证明系统“绝对安全”,而是识别攻击者最可能利用的路径,在上线前把高影响、低成本利用的问题消掉。

  • 账户与权限:别人能否冒充用户,或获得不该有的能力?
  • 业务资产:金额、库存、优惠券、积分、订单能否被篡改或重复使用?
  • 敏感数据:个人资料、Token、密钥和内部配置会不会泄露?
  • 可用性:恶意请求能否拖垮服务、耗尽资源或绕过限流?

测试边界

  • 只在已授权的系统、环境、账号和时间窗口内测试。
  • 优先使用测试环境、测试数据和非真实支付渠道。
  • 发现高危问题立即停止扩大验证并同步负责人。
🗺️

攻击面梳理

知道入口,才知道从哪测

常见攻击面

区域典型入口优先检查
身份入口登录、注册、找回密码暴力破解、账号枚举、会话固定
用户数据个人资料、订单、文件水平越权、敏感信息泄露
管理后台配置、审批、报表垂直越权、默认账号
接口与网关REST、GraphQL、Webhook鉴权缺失、参数篡改、重放
第三方依赖支付、短信、对象存储回调伪造、密钥和权限错误

最小威胁建模

  1. 列出资产:账号、订单、资金、文件、后台权限、密钥。
  2. 列出入口:页面、接口、后台、任务、回调和第三方集成。
  3. 思考攻击者目标:偷数据、越权、薅优惠、伪造回调还是拖垮系统?
  4. 给风险按影响和发生概率排序,先测高风险路径。
🔑

认证与会话安全

你是谁,凭什么证明

身份认证测试矩阵

场景测试动作期望结果
登录失败密码或验证码错误提示不暴露账号是否存在,失败次数受控
暴力破解短时间连续请求限速、验证码、临时锁定与审计有效
Token缺失、过期、篡改统一拒绝,不返回内部异常细节
退出登录旧 Token 再次访问令牌或服务端会话已失效
密码重置复用链接、篡改用户 ID一次性令牌、短有效期、绑定目标用户

额外检查

  • Cookie 应设置 HttpOnly、Secure 与合适的 SameSite 策略。
  • Token 不应放在 URL 查询参数中,避免进入日志、历史记录和 Referer。
  • 登录、改密、绑定设备等敏感操作应有适当的二次校验。
🚧

授权与越权测试

最常见,也最容易漏

权限测试要覆盖资源、角色和字段

类型验证方式安全预期
水平越权用户 A 修改订单 ID 查询用户 B 的订单只能访问自己的资源
垂直越权普通用户调用管理端接口服务端按角色或权限拒绝
字段越权请求体传入 role=admin忽略或拒绝不可写字段
批量操作一次提交多个资源 ID逐个校验资源归属

实操顺序

  1. 准备至少两个普通用户和一个管理员账号,资源归属要不同。
  2. 分别用不同 Token 请求相同接口,只改资源 ID 或归属字段。
  3. 检查读取、修改、删除、导出、批量操作是否都做了服务端校验。
  4. 不能只看前端按钮是否隐藏;真正的判定必须发生在服务端。
🧪

输入、输出与常见漏洞

所有外部输入都不可信

高频验证点

类别测试关注安全要求
注入SQL、命令、模板注入参数化查询;错误不回显底层语句
XSS反射、存储、DOM XSS按上下文编码,富文本使用白名单
文件上传伪造后缀、双扩展名、超大文件校验内容和大小,隔离存储,不可执行
SSRFURL 参数访问内网或云元数据限制协议、域名、IP 段和重定向
配置泄露debug、错误页、目录列表关闭调试信息,不暴露密钥和堆栈

输入验证的正确位置

  • 前端校验提升体验,但不是安全边界;攻击者可以绕过页面直接请求接口。
  • 服务端对类型、长度、格式、枚举值和业务状态做白名单校验。
  • 错误信息对用户要可读,对攻击者要克制:不回传 SQL、调用栈、绝对路径或密钥。
🔌

API 安全测试

移动端与前端都挡不住裸接口

请求侧

  • 每个敏感接口都需要认证和资源级授权。
  • 签名、时间戳、nonce 与重放保护应覆盖关键交易。
  • 分页大小、查询范围和导出任务需要限制。
  • 调试接口、Swagger 和过期版本不应错误暴露到公网。

响应侧

  • 按最小化原则返回字段,不返回密码、密钥、内部状态。
  • 错误码一致,避免通过响应差异枚举账号或资源。
  • 不信任客户端传回的价格、角色和归属信息。
  • 高成本请求要有鉴权、限流、超时和审计。
💳

业务安全

规则被绕过,比技术漏洞更贵

电商与交易场景必测

  • 改价格、改数量、改优惠券 ID:服务端必须重新计算金额。
  • 支付回调重复、乱序或伪造:订单状态和资金流水必须幂等且可验证来源。
  • 并发抢库存、领券、签到:不能超卖、超发或重复记账。
  • 退款、取消、确认收货等状态不能跳级,权限和时间窗口必须受控。

一个判断标准

如果攻击者不需要绕过技术防线,只要篡改一个正常参数就能获得不当利益,这就是业务安全问题。用例要从“用户会不会这样点”升级到“恶意用户会怎样构造请求”。

🧰

工具与测试流程

工具帮助发现,人工负责判断

常用工具

  • 浏览器 DevTools:看请求、Cookie、CORS、安全响应头。
  • Burp Suite:代理拦截、重放、参数对比和授权测试。
  • Postman:沉淀可复用 API 安全用例与断言。
  • OWASP ZAP:在授权范围内辅助发现常见 Web 配置问题。

推荐流程

  1. 读业务与资产,先做攻击面和风险排序。
  2. 手工验证认证、越权、关键业务规则。
  3. 工具辅助发现输入、配置和响应问题。
  4. 复现并记录最小证据,评估真实影响。
  5. 修复后回归,把高价值用例沉淀进自动化。
📝

漏洞交付与复测

可复现、可判断、可修复

一份有效漏洞报告至少包含

  • 标题与等级:清楚表达什么问题、影响什么资产。
  • 受影响范围:环境、接口、账号角色、前置条件。
  • 最小复现步骤:请求方法、参数变化、可观察结果。
  • 影响说明:攻击者实际能读取、修改或造成什么损失。
  • 修复建议:给出原则与方向。
  • 复测结论:原路径被阻断,正常业务没有回归。

上线前 10 分钟安全自查

优先消灭高风险漏项

身份与权限

  • 默认账号已关闭或改密
  • Token 和 Cookie 配置正确
  • 用户只能访问自己的资源
  • 管理接口有服务端鉴权

数据与配置

  • 响应不含密钥和敏感字段
  • 生产关闭 debug 与详细错误
  • 上传文件隔离且不可执行
  • 密钥来自安全配置,不在代码中

业务与运营

  • 金额和库存由服务端计算
  • 支付回调可验签且幂等
  • 关键接口有限流与审计
  • 高危问题已有修复与复测证据