Можно ли подделать ваш IP ... Безопасно ли тестировать IP-адреса? - PullRequest
9 голосов
/ 10 сентября 2010

У меня есть некоторые дополнительные функции на сайте, которые могут использовать сотрудники, но клиенты не могут их видеть.

Все сотрудники будут работать в нескольких доменах.

Что я делаю, так это получаю IP пользователя:

$user_ip = gethostbyname($_SERVER['REMOTE_ADDR']);

Затем я получаю массив всех ips для доменов, которые будут использовать пользователи gethostbyname

Затем я проверяю, входит ли пользователь в один из доменов следующим образом:

in_array($user_ip,$allowedIPS)

Так что, если пользователь находится в одном из доменов, он видит дополнительные функции для внутреннего использования. В противном случае они просто видят, что предназначено для широкой публики.

Мои вопросы: это безопасно? Или кто-то может подделать свой IP-адрес, чтобы он отображался в нашем домене и получил доступ к этим функциям?

Ответы [ 9 ]

8 голосов
/ 10 сентября 2010

Невозможно подделать TCP-соединение через открытый интернет из-за Трехстороннего рукопожатия .Однако, возможно, можно получить доступ к этой функции, используя CSRF .

PHP извлекает $_SERVER['REMOTE_ADDR'] непосредственно из TCP-сокета Apache, поскольку злоумышленник не может на него повлиять.И да, я посмотрел на этот код.

8 голосов
/ 10 сентября 2010

Мои вопросы: это безопасно? Или кто-то может подделать свой IP-адрес, чтобы он отображался в нашем домене и получил доступ к этим функциям?

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

В вашем сценарии это кажется достаточно хорошим. Ну, за исключением того, что привилегированным пользователям не будет разрешен доступ к контенту с других IP-адресов без какого-либо VPN.

Обратите внимание, что IP-спуфинг обычно имеет значение, отличное от того, которое вы используете. Это означает только подделку исходного адреса пакета. Это само по себе бесполезно, поскольку для доступа к услуге также необходимо получить ответ от сервера. Даже «IP-спуфинг» в этом смысле сегодня редок из-за лучшей маршрутизации.

2 голосов
/ 10 сентября 2010

Если вы собираетесь это сделать, делайте это с помощью конфигурации Apache, а не с помощью кода.По сути, вы заново изобретаете встроенную функциональность.

Что касается прямого вопроса, как уже говорили другие, подмена IP возможна, если нетривиально.Также надеемся, что у вас нет незащищенных беспроводных точек доступа.

РЕДАКТИРОВАТЬ: Apache access control инструкции.Это мое предположение, что вы используете Apache из-за использования PHP, если вы на самом деле используете IIS, он по-прежнему настроен на настройку, но явно отличается по своему исполнению.

2 голосов
/ 10 сентября 2010

Я не думаю, что это возможно, потому что когда вы делаете запрос к серверу, вы фактически запрашиваете у вашего интернет-провайдера запросить сервер.

, пока вы проверяете все метаданные HTTP, которыеИнтернет-провайдер направляет вам, например, X-FORWARDED-FOR и метаданные прокси, и вы должны иметь возможность поддерживать жесткую систему.

Вот диаграмма, которая может помочь вам понять, что я имею в виду: alt text

читайте здесь для получения дополнительной информации.

http://www.astahost.com/info.php/hacker39s-view-easy-spoofing-ip-address_t13807.html

2 голосов
/ 10 сентября 2010

IP-спуфинг возможен, если нетривиален.

Почему ваши сотрудники не могут войти в систему, чтобы получить доступ к функциям только для сотрудников?

0 голосов
/ 11 сентября 2010

Когда мы столкнулись с подобным вопросом, мы пришли к выводу, что, если пользователь обращается к нам через http, мы не можем абсолютно полагаться на его IP-адрес, потому что они могут использовать прокси.Но https - это всегда прямое соединение;он не допускает прокси, поэтому мы можем быть уверены, что IP-адрес, который мы видели, был правильным.Поэтому мы заблокировали наших пользователей на основе IP-адреса, ПЛЮС они должны были получить доступ к сайту через https (и войти в свою учетную запись, конечно).

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

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

Кроме того, если ваши пользователи приходят с домашних компьютеров, имейте в виду, что их IP-адрес может измениться.время.Большинство интернет-провайдеров выдают своим клиентам динамические IP-адреса, которые можно переназначать. Это означает, что при каждом подключении к Интернету есть вероятность, что вы получите другой IP-адрес.В этом случае подмена не происходит, но, тем не менее, вы не сможете надежно идентифицировать пользователя по его IP-адресу.

0 голосов
/ 11 сентября 2010

$_SERVER['REMOTE_ADDR'] предоставляется вашим веб-сервером, и невозможно напрямую подделать его.Единственный способ обойти это - прокси-соединение через один из разрешенных IP-адресов.

0 голосов
/ 10 сентября 2010

Я проголосовал за ROOK на этом. Вы не можете подделать TCP-соединение и по-прежнему получать доступ к своему сайту с того же компьютера, на котором производится подмена. Зачем? Поскольку ответ, который ваш веб-сервер (первоначально) сделает на поддельный IP-адрес при попытке установить соединение через сокет (трехстороннее рукопожатие TCP).

Вполне возможно, что если у вас есть два компьютера (A и B) по двум разным общедоступным IP-адресам, и вы используете один из компьютеров (A) для подмены или отправки пакетов на ваш веб-сервер, используя IP-адрес B, то есть когда ваш веб-сервер отвечает, что отправляет пакеты на B.

Если IP-адреса, используемые в поддельном вызове, являются внутренними в вашей подсети, то внутренние рабочие станции будут получать пакеты TCP ACK для неинициализированных пакетов TCP SYN и отклонять их или игнорировать. Я не знаю ни одной реализации стека TCP / IP, которая пыталась бы завершить трехстороннее рукопожатие с пакетами только ACK; это нарушает стандартный протокол.

Спуфинг - это метод для UDP-затопления, когда злоумышленник выполняет DoS-атаку (отказ в обслуживании), используя поддельный IP-адрес, чтобы попытаться скрыть свои следы.

Надеюсь, это поможет.

0 голосов
/ 10 сентября 2010

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

...