Я хочу посчитать уникальных посетителей на моей веб-странице. Я получаю IP-адрес клиента, используя следующую функцию:
$ipaddress = '';
if ($_SERVER['HTTP_CLIENT_IP'])
$ipaddress = $_SERVER['HTTP_CLIENT_IP'];
else if($_SERVER['HTTP_X_FORWARDED_FOR'])
$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
else if($_SERVER['HTTP_X_FORWARDED'])
$ipaddress = $_SERVER['HTTP_X_FORWARDED'];
else if($_SERVER['HTTP_FORWARDED_FOR'])
$ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
else if($_SERVER['HTTP_FORWARDED'])
$ipaddress = $_SERVER['HTTP_FORWARDED'];
else if($_SERVER['REMOTE_ADDR'])
$ipaddress = $_SERVER['REMOTE_ADDR'];
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
Должен ли я позвонить htmlspecialchars()
функция на нем, прежде чем вставить его в базу данных? Я слышал, что можно манипулировать заголовками и изменять IP-адрес, чтобы добавить к нему XSS или SQL-инъекцию (я уже звоню real_escape_string()
функция) атака.
Учитывая, что тип данных, который вы ожидаете, — это IP, вам просто нужно проверить этот конкретный тип данных.
Добавьте следующее в ваш код
if(filter_var($ipaddress, FILTER_VALIDATE_IP)) return $ipaddress;
else return "Unknown";
Это в основном подтверждает, что это фактический IP-адрес, так что никакие векторы атаки SQL-инъекций или даже XSS не могут пройти через него.
Других решений пока нет …