Я разрабатываю веб-систему для своей школы (она на PHP, но это не важно).
Система должна вести себя по-разному в зависимости от того, находится ли пользователь в школьной сети (в частности, если они не в школьной сети им необходимо авторизоваться).
Поэтому мне нужен надежный, идеально защищенный от дурака (который может требовать слишком многого ...) способ проверки наличия клиентов в локальной сети.
Кажется, что обычный способ сделать это - сравнить подсеть пользователя с подсетью сервера. Однако в нашей школе есть несколько подсетей (включая несколько кампусов, каждый с несколькими подсетями, а также VPN), только одна из которых является подсетью сервера. Так что этот метод не сработает
Я читаю RFC1918, который резервирует следующие IP-пространства для частных сетей:
10.*.*.*
172.16.*.* - 172.31.*.*
192.168.*.*
Могу я просто проверить, находится ли IP-адрес клиента в какой-либо из этих частных подсетей? Есть ли вероятность, что пользователи вне сети могут иметь такой IP? Или пользователи, подключенные к школьной сети, не будут иметь IP-адрес в одном из этих диапазонов?
Если ваша школа фильтрует входящие адреса на входе, то использование адресного пространства RFC 1918 в качестве индикатора нахождения «в локальной сети», вероятно, будет приемлемым. Честно говоря, использование IP-адреса в качестве неявной аутентификации мне кажется немного хитрым, но это сработает.
Если ваша школа не фильтрует адресное пространство RFC 1918 на входе, то теоретически возможно, что злоумышленник извне может получить пакеты на ваш сервер, полученные из адресного пространства RFC 1918, которое не используется школой. Это будет зависеть от того, как вышестоящий интернет-провайдер из школы фильтрует трафик.
Когда кто-то обращается к вашему приложению из локальной сети, которая использует адресное пространство RFC 1918, граничное устройство удаленного пользователя переходит через NAT к своему исходному адресу на общедоступный IP-адрес, поэтому вы не увидите трафик RFC 1918, поступающий из Интернета (если только кто-то пытается сделать что-то коварное).
Это никак не сработает. Существует огромная вероятность того, что пользователи, находящиеся в другой частной сети, обнаружат, что они используют диапазон RFC1918. RFC не говорит, что они зарезервированы для частного использования только вашей школой. По сути, каждая организация, у которой нет общедоступных IP-адресов (почти все), использует адреса RFC1918 для конечных точек.
Лучший, возможно, единственный надежный метод - иметь одно или оба имени хоста:
Так работают такие вещи, как Microsoft NLA (осведомленность о сетевом местоположении) в Direct Access. Если вы не можете попасть на privateserver.myuni.edu, значит, вы находитесь в публичной сети и вам нужно войти через лобби.
/ редактировать Бах. Я неправильно понял вопрос. Я упустил из виду, что это веб-система, я думал, что заказчик разрабатывает компонент клиентского программного обеспечения. Ответ Эвана - правильный ответ.