常见漏洞验证121 条

开放重定向验证

跳转参数未做白名单校验时可被指向外部站点,常用于钓鱼与信任链滥用;验证目标参数是否放行任意外部地址。

开放重定向是什么

当跳转类参数(redirect、next、return_url、callback 等)未做白名单校验时,攻击者可构造链接把用户从可信域名导向外部站点。它本身不直接窃取数据,但常与钓鱼、OAuth 授权码劫持、SSO 回调滥用结合,借可信域名降低受害者的警惕,因此在信任链相关的接口上定级会更高。

基本信息

常见入口redirect、next、return_url、callback、continue
判定信号响应直接返回 30x 并指向外部域
影响钓鱼信任滥用、OAuth 与 SSO 回调链路风险
测试前提准备好自建的无害测试站点作为跳转目标
边界只做只读验证,不借助跳转投放任何内容

典型使用场景

  • 登录与登出流程的返回地址参数
  • 第三方登录与 SSO 的回调地址校验
  • 支付完成后跳回商户页面的跳转参数
  • 邮件与通知中的跳转链接参数
  • 短链与推广链接重定向服务

验证步骤

验证步骤
# 1. 提交指向自建测试站点的地址,观察是否发生 30x 跳转
curl -si "https://target.example/login?next=https://test.example/a" | grep -i location
# 2. 尝试不同写法,检查校验强度
#    - 协议相对写法://test.example/a
#    - 多级跳转:先跳本站再跳外部
#    - 后缀混淆:把外部域名拼在可信域名之后或之前
# 3. 记录参数名、完整跳转链(Location 序列)
# 4. 登录、登出、支付回调链路都要覆盖

写法与信号读法

写法意图命中含义
完整外部地址最基础的检测命中即无校验,风险明确
协议相对地址绕过只匹配 http 前缀的规则命中说明校验不完整
多级跳转绕过一次性校验说明只校验了第一跳
后缀混淆绕过结尾匹配的白名单规则命中说明用字符串包含做判断
修复视角:只允许站内相对路径,或对域名做严格白名单(含协议与端口);对外链跳转增加中间确认页。
OAuth 场景的 redirect_uri 校验规则更严格,需单独核对:优先精确匹配注册地址,不做前缀或通配放行。

易错点

  • 只测单次跳转,忽略多级跳转与解码后再命中的情况
  • 把公开的跳转服务一律判定为缺陷,未结合用途与数据敏感度
  • 验证时跳转到真实钓鱼页面,扩大影响并留下法律责任风险
  • 忽略登录登出之外的链路,漏掉支付与 SSO 回调的真实风险点

数据来源与参考

  • OWASP WSTG WSTG-CLNT-04
  • CWE-601(Open Redirect)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌