Надеюсь, мой вопрос соответствует тематике этого сайта.
Я разрабатываю CMS. В настоящее время мои зарегистрированные пользователи заблокированы для своего IP-адреса для сеанса. К сожалению, небольшая часть моей пользовательской базы постоянно переключается между двумя или более IP-адресами. Большинство из них, вероятно, используют балансировщики нагрузки. Технически нет необходимости привязывать сеансы пользователей к одному IP-адресу. Я не ожидал, что клиенты будут переключаться между несколькими IP-адресами для запроса одной страницы на моем веб-сайте.
Теперь мне интересно, каковы риски, позволяющие моим клиентам постоянно переключаться между IP-адресами для запроса страницы (например, файлы CSS запрашиваются xxx.xxx.xxx.xxx, а файлы JavaScript запрашиваются yyy.yyy.yyy. ггг)? Должен ли я вообще разрешать или запрещать это?
небольшая часть моей пользовательской базы постоянно переключается между двумя или более IP-адресами.
Предполагая, что ваши пользователи не пытаются активно скрыть свои настоящие IP-адреса с помощью службы анонимности ...:
Большинство корпоративных примеров, которые я видел, вызваны тем, что более крупные компании и некоторые интернет-провайдеры используют кластер прокси-серверов, каждый из которых имеет свой внешний IP-адрес, при этом пользовательские запросы получают балансировку нагрузки по этому кластеру.
Вы можете увидеть, как пользователи Dual Stack отправляют запросы как по IPv4, так и по IPv6 и переключаются между двумя протоколами. RFC 8305 для последующих запросов.
Другой сценарий - это когда я нахожусь на крайнем расстоянии от точки доступа Wi-Fi, и мое устройство «случайным образом» переключается между Wi-Fi и сотовыми данными.
В первом сценарии вы можете пойти на компромисс в отношении обеспечения «безопасности» такого IP-адреса в своих сеансах, учитывая только первые три октета, поскольку обычно такой кластер прокси-серверов находится в небольшой подсети и будет иметь соседние IP-адреса.
Во втором и третьем сценариях вы увидите совершенно разные IP-адреса клиентов, даже от несвязанных провайдеров.
Не привязывайте сеансы к определенному IP-адресу, это скорее нарушит работу пользователя, чем обеспечит повышенную безопасность.
Теперь мне интересно, каковы риски, позволяющие моим клиентам постоянно переключаться между IP-адресами для запроса страницы (например, файлы CSS запрашиваются xxx.xxx.xxx.xxx, а файлы JavaScript запрашиваются yyy.yyy.yyy. ггг)? Должен ли я вообще разрешать или запрещать это?
Основной риск - это захват сеанса злоумышленником. Если бы вы могли заблокировать один или небольшой набор IP-адресов, вы могли бы заблокировать пользователей с совершенно разных IP-адресов от взлома сеанса.
Проблема в том, что некоторые пользователи делают это законно. Независимо от того, используют ли они прокси с балансировкой нагрузки или находятся на грани двух точек беспроводного доступа (или чего-то еще), они используют несколько IP-адресов. Так что вы в значительной степени должны разрешить это для этих пользователей. И трудно сказать, каким пользователям требуется несколько IP-адресов, кроме случаев, когда они запрашивают с нескольких IP-адресов.
Один из способов уменьшить влияние этого - использовать HTTPS. Затем злоумышленник должен иметь способ взломать безопасный уровень, а также файл cookie сеанса. При небезопасном соединении злоумышленник мог просто использовать проверку сети для взлома файла cookie сеанса. Но через HTTPS тот же злоумышленник должен иметь доступ к одному из концов разговора. И если он есть у злоумышленника, то нет необходимости использовать другой IP-адрес.
TL; DR: обычно вы должны разрешать запросы с разных IP-адресов для одного и того же пользователя. Это может произойти по уважительным причинам. Вместо этого используйте HTTPS для защиты от этого класса эксплойтов.
каковы риски, позволяющие моим клиентам постоянно переключаться между IP-адресами при запросе страницы
С точки зрения безопасности - нулевые риски.
Теперь с практической точки зрения. Это означает, что вы не можете использовать определенные типы алгоритмов для обеспечения безопасности или DoS защита.
Простой способ ограничить количество запросов пользователей - отслеживать их по IP-адресу. Поскольку для этого не требуется взаимодействие с вашим сервером приложений, вы можете использовать для этого службы на более низких уровнях. Программное обеспечение, такое как mod_evasive от Apache, делает это. Вы все еще можете использовать эти методы, но изменение IP-адреса пользователем снизит их эффективность. С другой стороны, пользователи все равно будут переключать IP-адреса, поэтому эти методы никогда не были эффективными.
Связанный, но другой вариант использования - это ограничение неудачных попыток входа в систему. Это сделано для предотвращения подбора пароля методом перебора. Но опять же, вы ничего не сможете сделать, если пользователи меняют IP-адреса. По-настоящему серьезный хакер даже не стал бы использовать свои собственные машины. Он просто выиграет немного времени в ботнете (или воспользуется своим ранее зараженным ботнетом) и подключится к вашему сервису через 10 000 чужих компьютеров (IP-адресов). На самом деле это не связано с ограничением IP-адреса пользователя, поскольку это предварительный вход в систему, но об этом следует помнить.
Существует несколько причин, по которым пользователь может перейти на новый IP-адрес.
Теперь мне интересно, каковы риски, позволяющие моим клиентам постоянно переключаться между IP-адресами для запроса страницы?
Преимущество блокировки клиентских сессий для IP-адресов состоит в том, что она усложняет атаки с перехватом сессий. Если у злоумышленника есть механизм, который позволяет им украсть файлы cookie клиентов, но не позволяет им подключаться к вашему серверу с IP-адреса клиентов, то блокировка IP не позволит им украсть сеанс.
Обратной стороной является то, как вы говорите, это вызовет сбой у некоторых пользователей, которые обнаружат, что их сеанс недействителен без очевидной причины.
Большинство сайтов в настоящее время, похоже, думают, что поломка перевешивает преимущества такой блокировки.