В Heroku Cedar я хотел получить IP-адрес клиента. Первая попытка:
ENV['REMOTE_ADDR']
Это не работает, конечно, потому что все запросы передаются через прокси. Поэтому альтернативой было использование:
ENV['HTTP_X_FORWARDED_FOR']
Но это не совсем безопасно, не так ли?
Если он содержит только одно значение, я беру это. Если он содержит более одного значения (разделенный запятой), я мог бы взять первый.
Но что, если кто-то манипулирует этим значением? Я не могу доверять ENV['HTTP_X_FORWARDED_FOR']
, как мог, с помощью ENV['REMOTE_ADDR']
. И нет списка доверенных прокси, которые я мог бы использовать.
Но должен быть какой-то способ надежно получить IP-адрес клиента, всегда. Вы знаете кого-то?
В их документы, Heroku описывает, что X-Forwarded-For
- это "исходный IP-адрес клиента, подключающегося к маршрутизатору Heroku".
Звучит так, как если бы Heroku мог переписывать X-Forwarded-For
исходящим удаленным IP-адресом. Это предотвратит спуфинг, не так ли? Кто-нибудь может это подтвердить?