提问人:poisedsquirrel 提问时间:1/24/2019 更新时间:6/20/2023 访问量:2553
CloudFlare JS 挑战打破了我的 SPA
CloudFlare JS challenge is breaking my SPA
问:
我有一个基于 React 的 SPA,它通过 S3 托管在一个子域上,react.mydomain.com......它与托管在另一个子域 VPS 上的 PHP REST API 进行通信,api.mydomain.com .CloudFlare 背后的 api.mydomain.com。该 Web 应用程序位于 CloudFront 后面,因为它位于 AWS 上。
我遇到了机器人直接向 API 发出的请求淹没我的 VPS 的问题,我想将 JS 质询功能与 CloudFlare 一起使用来缓解。
然而,似乎正在发生的事情是,用户能够加载 React Web 应用程序(它不在 CloudFlare 后面)。然后,提示 JS 质询的请求将立即失败并显示 503 响应,因为它是 AJAX 请求,并且与 Javascript 质询不兼容。
我想我可以通过捕获错误并重定向来处理这个问题。但是,如果我手动强制自己的浏览器导航到 api.mydomain.com URL,我将看到 CloudFlare 质询并通过它。但是,如果我随后导航回我的 react.mydomain.com SPA,则 OPTIONS 请求将失败,因为它无法附加告诉 CloudFlare 它已通过的 cookie。
我不明白如何调整我的基础设施,以便我可以利用使用 JS 挑战。目前,我只能使用速率限制,但我发现,当我变得严重到用户开始抱怨时,我仍然允许似乎 ~75% 或更多的不需要的机器人流量通过。
答:
如果您有后端访问权限,则可以使用 NPM,并在检测到机器人时将其用作临时解决方案。process.kill(process.pid)
评论
我建议不要在 s3 中仅托管 spa 文件上传或附件到 s3
在 Ec2 上托管并通过安全组策略阻止所有访问 只允许 Cloudflare IP 的 此处列出的 https://www.cloudflare.com/ips/
您还可以使用 Amazon AWS Lambda 无服务器托管,而不是 s3 https://aws.amazon.com/lambda/?c=ser&sec=srv
评论
eval()