Node.js req.headers.origin未定义

Node.js req.headers.origin未定义,node.js,express,sails.js,Node.js,Express,Sails.js,对Node和Express来说相当陌生。我有一个sails.js应用程序,它依赖于知道请求的来源,因为我需要验证请求是否来自已注册的域 我在日志中看到,原点偶尔是空的,为什么会发生这种情况?依赖原始财产不是一个好主意吗?还有其他选择吗 谢谢如果用户来自ssl加密的网站,则来源可能会被隐藏 另外:一些浏览器扩展从http请求头中删除origin和referer,因此origin属性将为空 您可能希望创建某种身份验证令牌并将其作为参数传递,而不是依赖于请求头。尤其是由于标题可能被伪造/操纵。尝试以下

对Node和Express来说相当陌生。我有一个sails.js应用程序,它依赖于知道请求的来源,因为我需要验证请求是否来自已注册的域

我在日志中看到,原点偶尔是空的,为什么会发生这种情况?依赖原始财产不是一个好主意吗?还有其他选择吗


谢谢

如果用户来自ssl加密的网站,则来源可能会被隐藏

另外:一些浏览器扩展从http请求头中删除origin和referer,因此origin属性将为空

您可能希望创建某种身份验证令牌并将其作为参数传递,而不是依赖于请求头。尤其是由于标题可能被伪造/操纵。

尝试以下方法:

app.use(function(req, res, next) {
  res.header("Access-Control-Allow-Origin", req.header('origin'));
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  res.header("Access-Control-Allow-Credentials","true");
  next();
}); 
试试这个

var host = req.headers.host;


太棒了,谢谢你。现在这很有道理。我已经有了身份验证令牌,但是人们很容易找到它,因为我的服务使用了一段JS,任何人都可以在他们自己的站点上安装,所以源代码是安全检查的另一部分。有什么更好的办法来解决这个问题?是否仍然无法可靠地获取来源?在服务器端生成令牌。使用只有您的服务器才能生成的内容(即基于密码或类似内容,因此一台服务器可以生成,另一台服务器可以验证)。这有点太复杂了,无法用一句话来解释。关于这个话题,有很多教程和论文。@peant出于好奇,为什么标题比params更容易被伪造/操纵?@babycakes他们不是;两者都可以伪造,但出于CSRF目的,标题不能被篡改,因为它是由浏览器而不是攻击者的页面生成的。另外,https中剥离的是
referer
,而不是
origin
。这取决于你的。谢谢@josebetomex的后续报道-我不再与Sails合作,所以我无法测试这个。这是错误的
req.get('host')
将返回服务器域或ip,但不返回引用,例如用户重定向或请求的位置。@krishna是的,您是对的,但在以前的节点版本中,您可以通过这种方式访问主机,但在较新的版本中
var host=req.headers.host是正确的方法吗
var host = req.get('host');