安全测试把 redirect_uri 换成 https://app.example.com.evil.cn/cb,授权页照常跳转,授权码直接落到了外站,可白名单在配置里明明写着,只在最前面比了一段字符。日志里能对上时间点,这种反而好排。

白名单用 startsWith 或者字符串包含来判断,只要伪造域名以合法域名开头就能混过去,回调地址这种场景必须做完整的字符串相等比较。这一点先确认清楚,后面就不用反复试。

ALLOWED=https://app.example.com/cb
[ '$redirect_uri' = '$ALLOWED' ] || exit 1

围绕「OAuth 回调白名单」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。

报错里带路径的,先去看那个路径在不在、权限对不对。

处理上按这个顺序:回调地址用全量枚举,一个字符一个字符地做相等比对;禁止通配和子路径放行,需要多环境就多写几条记录;换 token 的时候再核一次 client_id 与回调地址是否配套,两处都过才放行。

结果对不对很好判断,带后缀的伪造回调会被拒绝,正常的回调仍然能完成授权并换到 token。

作者 9823189