Можно ли доверять заголовку X-Forwarded-Proto? Если нет, есть ли альтернатива этому? - PullRequest
0 голосов
/ 14 мая 2019

Я пытаюсь перенаправить все 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, и приложение входит в цикл перенаправления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...