返回知识库
安全测试实战手册
不靠“扫一遍工具”碰运气,而是从攻击面、权限边界和业务风险出发,验证系统是否真正守得住。
10 个章节Web + API适用于测试、开发与产品负责人
🛡️
安全测试的目标
保护资产,而非刷漏洞数先问:我们到底在保护什么?
安全测试的核心不是证明系统“绝对安全”,而是识别攻击者最可能利用的路径,在上线前把高影响、低成本利用的问题消掉。
- 账户与权限:别人能否冒充用户,或获得不该有的能力?
- 业务资产:金额、库存、优惠券、积分、订单能否被篡改或重复使用?
- 敏感数据:个人资料、Token、密钥和内部配置会不会泄露?
- 可用性:恶意请求能否拖垮服务、耗尽资源或绕过限流?
测试边界
- 只在已授权的系统、环境、账号和时间窗口内测试。
- 优先使用测试环境、测试数据和非真实支付渠道。
- 发现高危问题立即停止扩大验证并同步负责人。
🗺️
攻击面梳理
知道入口,才知道从哪测常见攻击面
| 区域 | 典型入口 | 优先检查 |
|---|---|---|
| 身份入口 | 登录、注册、找回密码 | 暴力破解、账号枚举、会话固定 |
| 用户数据 | 个人资料、订单、文件 | 水平越权、敏感信息泄露 |
| 管理后台 | 配置、审批、报表 | 垂直越权、默认账号 |
| 接口与网关 | REST、GraphQL、Webhook | 鉴权缺失、参数篡改、重放 |
| 第三方依赖 | 支付、短信、对象存储 | 回调伪造、密钥和权限错误 |
最小威胁建模
- 列出资产:账号、订单、资金、文件、后台权限、密钥。
- 列出入口:页面、接口、后台、任务、回调和第三方集成。
- 思考攻击者目标:偷数据、越权、薅优惠、伪造回调还是拖垮系统?
- 给风险按影响和发生概率排序,先测高风险路径。
🔑
认证与会话安全
你是谁,凭什么证明身份认证测试矩阵
| 场景 | 测试动作 | 期望结果 |
|---|---|---|
| 登录失败 | 密码或验证码错误 | 提示不暴露账号是否存在,失败次数受控 |
| 暴力破解 | 短时间连续请求 | 限速、验证码、临时锁定与审计有效 |
| Token | 缺失、过期、篡改 | 统一拒绝,不返回内部异常细节 |
| 退出登录 | 旧 Token 再次访问 | 令牌或服务端会话已失效 |
| 密码重置 | 复用链接、篡改用户 ID | 一次性令牌、短有效期、绑定目标用户 |
额外检查
- Cookie 应设置 HttpOnly、Secure 与合适的 SameSite 策略。
- Token 不应放在 URL 查询参数中,避免进入日志、历史记录和 Referer。
- 登录、改密、绑定设备等敏感操作应有适当的二次校验。
🚧
授权与越权测试
最常见,也最容易漏权限测试要覆盖资源、角色和字段
| 类型 | 验证方式 | 安全预期 |
|---|---|---|
| 水平越权 | 用户 A 修改订单 ID 查询用户 B 的订单 | 只能访问自己的资源 |
| 垂直越权 | 普通用户调用管理端接口 | 服务端按角色或权限拒绝 |
| 字段越权 | 请求体传入 role=admin | 忽略或拒绝不可写字段 |
| 批量操作 | 一次提交多个资源 ID | 逐个校验资源归属 |
实操顺序
- 准备至少两个普通用户和一个管理员账号,资源归属要不同。
- 分别用不同 Token 请求相同接口,只改资源 ID 或归属字段。
- 检查读取、修改、删除、导出、批量操作是否都做了服务端校验。
- 不能只看前端按钮是否隐藏;真正的判定必须发生在服务端。
🧪
输入、输出与常见漏洞
所有外部输入都不可信高频验证点
| 类别 | 测试关注 | 安全要求 |
|---|---|---|
| 注入 | SQL、命令、模板注入 | 参数化查询;错误不回显底层语句 |
| XSS | 反射、存储、DOM XSS | 按上下文编码,富文本使用白名单 |
| 文件上传 | 伪造后缀、双扩展名、超大文件 | 校验内容和大小,隔离存储,不可执行 |
| SSRF | URL 参数访问内网或云元数据 | 限制协议、域名、IP 段和重定向 |
| 配置泄露 | debug、错误页、目录列表 | 关闭调试信息,不暴露密钥和堆栈 |
输入验证的正确位置
- 前端校验提升体验,但不是安全边界;攻击者可以绕过页面直接请求接口。
- 服务端对类型、长度、格式、枚举值和业务状态做白名单校验。
- 错误信息对用户要可读,对攻击者要克制:不回传 SQL、调用栈、绝对路径或密钥。
🔌
API 安全测试
移动端与前端都挡不住裸接口请求侧
- 每个敏感接口都需要认证和资源级授权。
- 签名、时间戳、nonce 与重放保护应覆盖关键交易。
- 分页大小、查询范围和导出任务需要限制。
- 调试接口、Swagger 和过期版本不应错误暴露到公网。
响应侧
- 按最小化原则返回字段,不返回密码、密钥、内部状态。
- 错误码一致,避免通过响应差异枚举账号或资源。
- 不信任客户端传回的价格、角色和归属信息。
- 高成本请求要有鉴权、限流、超时和审计。
💳
业务安全
规则被绕过,比技术漏洞更贵电商与交易场景必测
- 改价格、改数量、改优惠券 ID:服务端必须重新计算金额。
- 支付回调重复、乱序或伪造:订单状态和资金流水必须幂等且可验证来源。
- 并发抢库存、领券、签到:不能超卖、超发或重复记账。
- 退款、取消、确认收货等状态不能跳级,权限和时间窗口必须受控。
一个判断标准
如果攻击者不需要绕过技术防线,只要篡改一个正常参数就能获得不当利益,这就是业务安全问题。用例要从“用户会不会这样点”升级到“恶意用户会怎样构造请求”。
🧰
工具与测试流程
工具帮助发现,人工负责判断常用工具
- 浏览器 DevTools:看请求、Cookie、CORS、安全响应头。
- Burp Suite:代理拦截、重放、参数对比和授权测试。
- Postman:沉淀可复用 API 安全用例与断言。
- OWASP ZAP:在授权范围内辅助发现常见 Web 配置问题。
推荐流程
- 读业务与资产,先做攻击面和风险排序。
- 手工验证认证、越权、关键业务规则。
- 工具辅助发现输入、配置和响应问题。
- 复现并记录最小证据,评估真实影响。
- 修复后回归,把高价值用例沉淀进自动化。
📝
漏洞交付与复测
可复现、可判断、可修复一份有效漏洞报告至少包含
- 标题与等级:清楚表达什么问题、影响什么资产。
- 受影响范围:环境、接口、账号角色、前置条件。
- 最小复现步骤:请求方法、参数变化、可观察结果。
- 影响说明:攻击者实际能读取、修改或造成什么损失。
- 修复建议:给出原则与方向。
- 复测结论:原路径被阻断,正常业务没有回归。
✅
上线前 10 分钟安全自查
优先消灭高风险漏项身份与权限
- 默认账号已关闭或改密
- Token 和 Cookie 配置正确
- 用户只能访问自己的资源
- 管理接口有服务端鉴权
数据与配置
- 响应不含密钥和敏感字段
- 生产关闭 debug 与详细错误
- 上传文件隔离且不可执行
- 密钥来自安全配置,不在代码中
业务与运营
- 金额和库存由服务端计算
- 支付回调可验签且幂等
- 关键接口有限流与审计
- 高危问题已有修复与复测证据