Подтвердить что ты не робот

Rails ActionController: разница между request.remote_ip и request.remote_addr

В источнике ActionController локальные запросы определяются следующим образом:

def local_request? #:doc:
    request.remote_addr == LOCALHOST && request.remote_ip == LOCALHOST
end

В моем приложении я хочу использовать другую логику, если запросы поступают из определенного диапазона IP. В чем разница между request.remote_addr и request.remote_ip, и какой из них я должен использовать?

4b9b3361

Ответ 1

Я являюсь автором текущей реализации remote_ip, а другие вещи, которые он включает, включают проверку атак на IP-спуфинг и правильную обработку нескольких заголовков X-Forwarded-For. Однако есть большой оговорка: только некоторые веб-серверы Ruby поддерживают несколько заголовков, поэтому значение все равно может быть неправильным.

Я написал результаты тестирования самых популярных серверов приложений Ruby в своем блоге, которые вы можете проверить, если вопрос о повторных заголовках для вашего приложения.

Ответ 2

Кажется, что remote_addr возвращает значение переменной среды remote_addr as-is, а remote_ip будет корректировать это на основе наличия переменных HTTP_X_FORWARDED_FOR и HTTP_CLIENT_IP например, когда ваш клиент пересылается через прокси.

Эта двойная проверка для local_request? - это просто способ убедиться, что пользователь пришел с локальной машины и не был просто перенаправлен из другого места через локальный прокси.