Мабуть, кожен досвідчений користувач у мережі інтернет знає про те, що підключившись через проксі-сервер можна в деякому роді залишитися за завісою, не світячи своїм реальним IP адресою на сайтах. Клієнт підключається до інтернету через проксі-сервер, потім відкриває ресурси, і традиційно більша частина сайтів дізнається IP адресу користувача через глобальну змінну $_SERVER[‘REMOTE_ADDR’]. Тут є підводні камені, напевно, як і в будь-якій справі. Справа в тому, що якщо підключення клієнта відбувається через проксі-сервер, то в глобальній змінній $_SERVER[‘REMOTE_ADDR’] перебуватиме IP-адресу проксі-сервера, через який зайшов користувач, а не реальний IP користувача.
Спробувати дізнатися реальний IP-адресу машини клієнта в PHP можна через додаткові змінні HTTP_CLIENT_IP і HTTP_X_FORWARDER_FOR. Розглянемо приклад простого коду, в якому робиться спроба визначити дійсну IP адреса користувача, шляхом елементарних перевірок. В цілях зручності використання код оформлений у вигляді функції.
Функція для визначення реального IP-адреси:
function getIP(){
if (!empty($_SERVER[‘HTTP_CLIENT_IP’])){
$ip=$_SERVER[‘HTTP_CLIENT_IP’];
} elseif (!empty($_SERVER[‘HTTP_X_FORWARDED_FOR’])){
$ip=$_SERVER[‘HTTP_X_FORWARDED_FOR’];
} else {
$ip=$_SERVER[‘REMOTE_ADDR’];
}
return $ip;
}
Розповідати про те, як працює функція, думаю не потрібно, оскільки там і так все зрозуміло і без цього.
Додав: htmaker, 13.09.2015 р.
(2 голосів, середній: 2,50 із 5)
Завантаження…
Діліться з друзями:
См. також:
Пісочниця для PHP
Рубрика: PHP, Інструменти
Конфіг файли
Рубрика: PHP
Установка XCache в Linux CentOS
Рубрика: Linux, PHP
Використання SOAP в PHP
Рубрика: PHP
Встановлення PHP Soap на CentOS
Рубрика: Linux, PHP
Обсяг даних в зручному форматі на PHP
Рубрика: PHP
Транслітерація символів на PHP
Рубрика: PHP
Як перетворити URL-рядок в масив?
Рубрика: PHP
Добірка шаблонів регулярних виразів
Рубрика: PHP
Коментарі
27.12.2015 в 00:04
Спасибі! =)
Відповісти
30.01.2017 у 02:18
Дак не спрацює це:
elseif (!empty($_SERVER[‘HTTP_X_FORWARDED_FOR’])){
$ip=$_SERVER[‘HTTP_X_FORWARDED_FOR’];
Якщо IP проксі не порожній{ $ip = ip проксі }
І де тут визначення реального IP ??
Відповісти