$_SERVER['REMOTE_ADDR']
- это IP-адрес, в котором было подключено TCP-соединение. Хотя технически возможно двунаправленное обманывание IP-адресов в Интернете (путем объявления фол-маршрутов через BGP), такие атаки, скорее всего, будут обнаружены и недоступны типичному злоумышленнику - в основном ваш атакующий должен иметь контроль над провайдером или перевозчиком. Нет никаких возможных однонаправленных атак с использованием спуфинга с TCP (пока). Двунаправленное IP-спуфинг является тривиальным в локальной сети.
Также имейте в виду, что это может быть не IPv4, а адрес IPv6. Ваша текущая проверка в порядке, но если вы проверите, что 1.2.3.4
только в любом месте в пределах $_SERVER['REMOTE_ADDR']
, атакующий может просто связаться с 2001:1234:5678::1.2.3.4
.
В целом, для приложений, отличных от критических (банковские/военные/потенциальные повреждения> 50.000 €), вы можете использовать удаленный IP-адрес, если вы можете исключить злоумышленников в вашу локальную сеть.
Добавляя к существующим ответам, всегда будет IP-адрес, который сделал запрос на ваш сервер, но это не значит, что это IP-адрес компьютера, который начал запрос. Любое количество прокси-серверов может находиться между вами и конечным пользователем, а ближайший к вам - это IP-адрес, который вы получаете. –
Да, это безопасно, потому что не может быть заменено другими трюками или некоторым обманом. но убедитесь, что вы добавили дополнительную проверку для переменной $ grant_all_admin_rights. –
Любая переменная $ _SERVER может быть подделана - например. curl_setopt ($ ch, CURLOPT_HTTPHEADER, массив ("REMOTE_ADDR: $ ip", "HTTP_X_FORWARDED_FOR: $ ip")); Так что это полностью зависит от контекста: если злоумышленник ожидает ответа, он вернется к $ ip. Если они не заботятся об ответе, они могут наверняка подделать заголовок. Если ваш код после проверки заголовка вместо этого сказал: «open_the_door_to_badguys();» у вас возникнет проблема. – TMG