在nodejs中保护请求

时间:2018-05-24 15:30:13

标签: node.js rest security request

我有一个申请。我的申请有3层。

  • 前端(包含前端设计和功能)
  • 后端1(第2层 - 这是后端服务器,它从前端层获取数据,并提供给包含数据库操作的后端2.此层只是一个传输器)
  • 后端3是另一个后端,它通过来自第2层的数据触发数据库操作。

当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层中的请求,并确保此请求来自我们的前端,而不是来自我们的应用程序?

1 个答案:

答案 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名称,甚至可以使它们每天随机变化。所有这些都需要时间让对手弄清楚,直到他们弄明白,他们才会离线。如果它经常离线,他们可能会放弃。