使用Node fetch请求公共网站内部API遇403错误的解决方案咨询
问题解决方案
核心结论
该问题不属于无法突破的安全措施。浏览器控制台请求成功、其他环境请求返回403,本质是目标网站做了基础请求头之外的浏览器特征校验,你只要1:1模拟浏览器的完整请求特征,就能让服务端判定请求来自合法的所属网站。
排查与解决方法
- Cookie校验问题:很多场景下你复制的单次请求Cookie存在缺失或过期问题,正确操作是先模拟浏览器访问流程,先请求一次网站首页,拿到响应
Set-Cookie头返回的全量Cookie,后续接口请求时完整携带所有Cookie即可。 - CSRF Token/请求签名校验:绝大多数POST接口的403是因为缺少动态生成的校验字段:你可以先检索页面源码中是否存在
csrf-token类的meta标签,或是查看POST请求之前的前置接口响应中是否返回了token、sign类字段;如果是前端JS动态加密生成的签名,把对应的加密逻辑抠出后在Node环境模拟生成对应字段,随请求携带即可。 - TLS指纹校验:现在多数WAF会校验请求的JA3 TLS握手指纹,
node-fetch、Postman默认的指纹和Chrome浏览器差异极大,很容易被识别。你可以替换请求库为支持自定义TLS指纹的undici或者tls-client,直接模拟Chrome的指纹即可绕过这类校验。 - 请求头顺序校验:部分WAF会校验请求头的发送顺序,不要自行调整头的顺序,严格按照Chrome开发者工具Network面板中显示的请求头顺序设置即可。
内容的提问来源于stack exchange,提问作者joesjo
相关产品推荐
相关产品推荐

