Я пытаюсь перенаправить все http-запросы на https для экспресс-сервера node.js, развернутого на Heroku.
В этой степени я тестирую заголовок 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-адреса ненадежны.
Документация Heroku :
Заголовки X-Forwarded-For, X-Forwarded-By, X-Forwarded-Proto и X-Forwarded-Host не являются доверенными по соображениям безопасности, поскольку невозможно узнать порядок, в котором уже существуют поля были добавлены.
Правильно ли мое понимание, может ли оно быть изменено злоумышленником, чтобы мы могли верить наше приложение доступно через https, хотя на самом деле оно использует http?
Если да, есть ли другой (безопасный) способ проверки протокола, используемого для доступа к приложению, развернутому в Heroku?
Примечание:
Я также попытался проверить флаг req.secure
, но это всегда false
, и приложение входит в цикл перенаправления.