我正在尝试将所有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标头:
X-Forwarded- *标头很容易被欺骗,并且检测到的IP地址不可靠。
出于安全原因,X-Forwarded-For,X-Forwarded-By,X-Forwarded-Proto和X-Forwarded-Host标头不受信任,因为无法知道现有字段的顺序已添加。
我的理解是否正确,攻击者可以更改它,以便我们相信我们的应用程序实际上是使用http时通过https访问的吗?
如果是,是否还有其他(安全)方式来验证用于访问Heroku上部署的应用程序的协议?
注意:
我还尝试验证req.secure
标志,但是它始终为false
,并且应用程序进入重定向循环。