我制作了一个Web服务,并且我将使用React。该服务的数据将从我的API中获取。
但是有一种简单的方法可以找出我正在使用的端点以及正在发送的数据。这些知识为使我的服务成为机器人提供了很多选择。
是否有防止这种情况发生的选项?
我知道,我可以要求所有请求都签名,但是也很容易了解。
答案 0 :(得分:1)
这里可以使用两种基本的预防措施。
验证码
使用recaptcha之类的验证码服务。因此,只有通过验证码测试的用户才能使用您的网站。机器人很难通过验证码。
速率限制Api使用率。
将速率限制添加到您的api。这样登录的用户在10分钟内只能发出100个请求,具体数量取决于您的使用情况
答案 1 :(得分:1)
无法完成。无论用客户端JavaScript执行什么操作,都可以进行反向工程和模拟。
应当集中精力防止滥用API,即根据客户端的活动或可用信息(用户代理,可疑请求,产生的流量)对客户端进行限制或列入黑名单。如果使用API允许验证码,则可要求可疑客户证明其人道性。
有一半的措施可以应用于客户端应用程序,从而降低滥用(以及开发)的优势。
防止未经授权访问未缩小/未混淆的JS和源地图。可能需要根据每个用户授权它们。这将使调试和错误报告更加困难
与浏览器API的请求签名有关的硬编码部分,例如:
apiKey = hash(NOT_SO_SECRET_KEY + document.querySelector('.varyingBlock').innerHTML)
这需要机器人模拟浏览器环境,并使它们的工作效率大大降低。这也会以负面方式影响应用程序的设计。显然,SSR会带来更多困难,并且无法轻松转换为本地平台。