req.headers.origin未定义

Gil*_*ler 8 node.js express sails.js

Node和Express相当新.我有一个sails.js应用程序,它依赖于知道请求的来源,因为我需要对请求进行身份验证来自已注册的域.

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

谢谢

Pea*_*nut 13

如果用户来自ssl加密网站,则可能隐藏原点.

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

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

  • 在服务器端生成令牌。使用只有您的服务器可以生成的内容(即基于密码或类似的内容,以便一台服务器可以生成它,而另一台服务器可以验证它)。这有点太复杂了,很难用一条评论来解释。不过,有很多关于这个主题的教程和论文。 (2认同)
  • @Peanut出于好奇,标题如何比params更容易被伪造/操纵? (2认同)
  • @babycakes 他们不是;两者都可以伪造,但出于 CSRF 目的,标头不能被篡改,因为它是由浏览器而不是攻击者的页面生成的。另外,https 中被删除的是“referer”,而不是“origin”。这取决于您的 [referrer-policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy)。 (2认同)