【发布时间】:2015-01-04 22:36:18
【问题描述】:
我正在为我的 Node.js/Express.js 应用程序设置一层安全性,我想限制对 authlist(授权列表)域的访问。
注意
authlist的反义词是denylist。
纲要:
- 用户在我的系统上创建
Project。 - 每个
Project都会发出一个Public Key和Secret Key,用于创建签名请求。 - 此外,任何给定
Project的管理员都需要提供他们希望能够访问给定Project的API 的域的authlist。这是在基于 Web 的控制台中完成的,而不是作为每个请求的一部分。 - API 收到请求时,
req.get('origin')用于确定请求的源域。 - 根据
authlist检查来源,并相应地允许或拒绝。
在代码中:
var app = require('express');
app.post('/my-api-endpoint', function(req,res) {
var originDomain = req.get('origin'); /// e.g. mysite.com
/// Origin is then checked against the authlist array of domains
});
问题
- 关于域来源,我需要注意哪些问题 欺骗?
- 这是一个值得的安全功能吗?或者它很容易被欺骗以至于没有必要打扰?
【问题讨论】:
-
这可能适用于服务器,但对于您通常知道 IP 地址的服务器,因此使用它更容易。对于客户端,无法保证您看到的 IP 地址将与原始计算机相关,或者它根本不会解析为域。这不包括任何会使事情进一步复杂化的恶意活动。这可能不值得实施。
-
我实际上已经使用 IP 白名单实现了这个,但问题是,如果我有一个客户想要在 AWS Auto-Scaling-Group 这样的环境中托管他们的应用程序,那么他们就是不想在每次应用扩展时都更新 IP 白名单。感谢您的信息。
-
在我看来,您应该颁发身份验证凭据并以这种方式规范对 API 的访问。然后,您的客户可以使用他们想要的任何基础设施,而这不关您的事。
-
我想我会把它设为可选,如果他们有一个静态 IP 的服务器,用户可以打开 IP 白名单。
-
@AJB req.get('origin') 并不总是被定义为并非所有浏览器都可能不尊重发送它,用户可能会伪造标题中的来源,更不用说 req.get(' origin') 几乎总是在 HTTPS/SSL 上未定义,我假设您正在使用它。
标签: javascript node.js api express cross-domain