我有一个申请。我的申请有3层。
当XHR请求从前端发送时,它转到第2层,在Nodejs服务器的第2层,它将添加API密钥并通过特殊地址转发请求到后端2。在后端2,它将首先检查API密钥,然后触发操作。
示例:
1- form submited in front end to "/api/create_user"
2- in front-end 2 -> request handled "/api/create_user" get the request and
send to "/api/create_user_dkfjhierhgeirhuggridrfjkndf/APIKEY"
3- in back-end 2 -> it check the the request address and APIKEY then trigger
the request.
问题是有人通过我们的应用程序发出的应用程序发出了一些请求。
我的问题如何检查第2层中的请求,并确保此请求来自我们的前端,而不是来自我们的应用程序?
答案 0 :(得分:1)
所以......你在互联网上有一个API,以及一个使用API的网络应用程序。
有人看了你的应用程序,找出了你的API调用(逆向工程),并且他们编写了自己的前端。
如果您的应用程序是网站,则可以执行一些操作。 CORS是其中之一。 https://en.wikipedia.org/wiki/Cross-origin_resource_sharing
使用CORS,Web浏览器加载网页并查看javascript xhr请求。 Web浏览器首先询问Web服务器是否有权访问Web服务器。
这取决于强制访问的Web浏览器。如果你的对手使用像curl这样的应用程序,你就无能为力。
最常见的缓解措施是要求用户注册并且用户需要登录。即使这样也可以游戏,但现在对手需要复制您的登录流程,并获取登录凭据。
我意识到的最终缓解 - 您可以继续让对手难以获取您的网页。您可以设置随机cookie并验证每个请求的cookie。您可以在HTML中设置密码,并将其与您的XHR请求一起传递(如将其设置在标头中)并验证它是否存在。您可以更改您的API名称,甚至可以使它们每天随机变化。所有这些都需要时间让对手弄清楚,直到他们弄明白,他们才会离线。如果它经常离线,他们可能会放弃。