Могут ли запросы GET и POST с одного компьютера поступать с разных IP-адресов? - PullRequest
4 голосов
/ 29 мая 2010

Я почти уверен, что помню, что читал - но больше не могу найти ссылки - об этом: на некоторых интернет-провайдерах (включая, по крайней мере, одного крупного интернет-провайдера в США) можно получить пользовательский запрос GET и POST появляются с разных IP-адресов.

(обратите внимание, что это полностью связано с программированием, и я приведу пример ниже)

Я не говорю о динамическом изменении вашего IP-адреса между двумя запросами.

Я говорю об этом:

IP 1:  123.45.67.89
IP 2:  101.22.33.44

Тот же тот же самый пользователь делает GET, затем POST, затем снова GET, затем снова POST, и серверы видят это:

- GET  from IP 1
- POST from IP 2
- GET  from IP 1
- POST from IP 2

Так что, хотя это тот же пользователь , веб-сервер видит разные IP-адреса для GET и POST.

Конечно, видно, что HTTP - это протокол без сохранения состояния, это совершенно правильно, верно?

Я хотел бы найти объяснение того, как / почему некоторые интернет-провайдеры настроили свои сети так, чтобы это могло произойти.

Я спрашиваю, потому что кто-то попросил меня реализовать следующий IP-фильтр, и я почти уверен, что это принципиально неработающий код (разрушающий хаос, по крайней мере, для одного крупного американского провайдера).

Вот фильтр Java-сервлетов, который должен защищать от некоторых атак. Аргументация такова:

" Для любого фильтра сеанса проверяет, является ли IP-адрес в запросе тем же, который использовался при создании сеанса. Поэтому в этом случае идентификатор сеанса не может быть украден для формирования поддельных сеансов."

http://www.servletsuite.com/servlets/protectsessionsflt.htm

Тем не менее, я почти уверен, что это по своей сути нарушено, потому что есть интернет-провайдеры, где вы можете видеть, что GET и POST приходят с разных IP-адресов.

Ответы [ 2 ]

5 голосов
/ 29 мая 2010

Некоторые интернет-провайдеры (или сети университетов) используют прозрачные прокси-серверы, которые передают запрос от исходящего узла, который находится под наименьшей нагрузкой на сеть.

Можно также настроить это на локальном компьютере для использования сетевого адаптера с наименьшей нагрузкой, что может снова привести к этой ситуации.

Вы правы, что это допустимое состояние для HTTP и, хотя оно должно происходить относительно редко, именно поэтому проверка пользователя на основе IP не является надлежащим определителем идентичности.

1 голос
/ 29 мая 2010

Для веб-сервера это означает, что конечный пользователь находится за каким-то прокси / шлюзом. Как вы говорите, это совершенно верно, учитывая, что HTTP не имеет состояния, но я думаю, что это будет необычно. Насколько мне известно, большинство интернет-провайдеров назначают домашним пользователям реальный, непереведенный IP-адрес (хотя, как правило, динамический).

Конечно, для корпоративных / институциональных сетей они могут делать что угодно. Распределение нагрузки может означать, что запросы поступают с разных IP-адресов, и, возможно, иногда типы запросов передаются на разные шлюзы (хотя мне было бы интересно узнать почему, учитывая, что N_GET >> N_POST).

...