X-Forwarded-Proto标头可以信任吗?如果没有,是否有替代方法?

时间:2019-05-14 06:47:09

标签: node.js express heroku https http-headers

我正在尝试将所有http请求重定向到部署在Heroku上的node.js Express服务器的https。

在这种程度上,我正在测试请求的x-forwarded-proto标头,如下所示:

app.use(function(req, res, next) {
  if (req.get("x-forwarded-proto") !== "https") {
    res.redirect("https://" + req.headers.host + req.url);
  } else {
    next();
  }
});

但是,Heroku和Express文档似乎都指出“出于安全原因”,不信任X-Forwarded-Proto标头:

Express docs

  

X-Forwarded- *标头很容易被欺骗,并且检测到的IP地址不可靠。

Heroku docs

  

出于安全原因,X-Forwarded-For,X-Forwarded-By,X-Forwarded-Proto和X-Forwarded-Host标头不受信任,因为无法知道现有字段的顺序已添加。

我的理解是否正确,攻击者可以更改它,以便我们相信我们的应用程序实际上是使用http时通过https访问的吗?

如果是,是否还有其他(安全)方式来验证用于访问Heroku上部署的应用程序的协议?


注意:
我还尝试验证req.secure标志,但是它始终为false,并且应用程序进入重定向循环。

0 个答案:

没有答案