Express.js-请求者域/ IP可靠性

时间:2019-06-18 03:24:39

标签: javascript node.js express security backend

我最近看到this贴了关于获取请求域的文章。我想知道此信息是否可靠(即攻击者能否“伪造”此信息?)。具体来说,域和请求类型(GET,POST等)。我问的原因是因为我不确定是否可以使用它来保护应用程序的后端。我发现我应该只允许来自我自己域的POST请求。

1 个答案:

答案 0 :(得分:2)

客户端(例如浏览器)发送的请求不是来自特定域。它们来自客户端的IP地址。该客户端可能正在运行来自特定站点的网页,但是请求中包含的任何信息都不能被信任,并且可以被欺骗为客户端想要的任何内容。再考虑一下。客户请求不是来自域。它们来自可能会或可能不会在发出API请求之前从特定域接收到网页的客户端。

因此,不,您不能使用客户端提供的页面域信息来实现任何形式的合理安全性。如果请求中确实包含有关请求代码来自哪个网页的信息,那么该信息很容易被流氓客户端欺骗。

可能要求从浏览器使用的API与登录的用户结合使用(通过登录cookie或登录后获得的某种安全令牌),但不能对此进行“保护”。为了使浏览器能够访问您的API,包括流氓客户端在内的任何其他客户端也可以访问该API。

像Google这样的人在浏览器内部使用的API所使用的保护类型为:

  • API令牌,可让它们跟踪特定令牌的使用情况和/或撤消滥用服务的令牌
  • 限制等级以防止特定的API用户或IP地址滥用API服务
  • 关于许可使用的许可,然后在服务器端跟踪看起来是否许可的用途
  • 监视登录用户的使用以撤消滥用服务API的登录信息
  • 短寿命的API令牌,这些令牌在网页中动态生成并定期更改。

因此,在允许访问您的服务之前,您需要一个API帐户或一个用户登录名。除此之外,人们通常会保护API免受滥用,同时还意识到确定的自定义客户端仍然可以访问API。

  

我认为我应该只允许来自我自己域的POST请求。

您应该只允许来自有效的登录用户的POST请求(每个API请求都需要登录凭据),并且只应允许它们影响该特定用户有权修改的数据。您无法控制请求的来源或客户端的类型。