如何使用Express.js仅向白名单域提供API访问?

AJB*_*AJB 5 javascript api cross-domain node.js express

我正在为我的Node.js/Express.js应用程序开发一层安全性,我希望限制对域白名单的访问.

破败不堪:

  • 用户Project在我的系统上创建一个.
  • Project发出一Public KeySecret Key将被用于创建签名的请求.
  • 此外,任何给定的管理员Project都需要提供他们希望能够访问该API的域的白名单Project.这是在基于Web的控制台中完成的,而不是作为每个请求的一部分.
  • 当API收到请求时,req.get('origin')用于确定请求的原始域.
  • 根据白名单检查原点,并相应地允许或拒绝原点.

在代码中:

var app = require('express');

app.post('/API-Endpoint', function(req,res) {

    var originDomain = req.get('origin');   /// e.g. mysite.com
    /// Origin is then checked against the whitelist array of domains

});
Run Code Online (Sandbox Code Playgroud)

问题

  • 关于Domain Origin Spoofing,我需要注意哪些问题?
  • 这是一个有价值的安全功能吗?或者它是如此容易被欺骗,以至于没有必要打扰?

Bor*_*uhh 0

实现您所寻找的目标的最佳方法是完全忘记域,并可选择允许将 IP 范围列入白名单。话虽如此,世界上一些最大的 API 甚至不使用这个安全层(即 eBay、亚马逊 Marketplace 等)。

不过,为了解决额外的偏执,您可以让您的客户设置子网来启动他们的自动缩放服务器,从而为他们提供白名单的静态 IP 范围。然后,只有该 IP 范围内的服务器才会被授予访问您的端点的权限。

这是 AWS 上的一个问题,对此进行了更多解释: https://forums.aws.amazon.com/thread.jspa? threadID=233469