2014-11-02 4 views
0

Я хочу подсчет уникальных посетителей на моей веб-странице. Я получаю IP клиента с помощью следующей функции:XSS-атака в 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 Injection (я уже вызываю функцию real_escape_string()).

+0

Вы должны ** никогда ** HTML-escape-значение, которое вы храните в столбце базы данных. Вы должны избегать текста, когда вы объединяете его в этот формат. Вам нужно понять, что означает побег. – SLaks

+0

@SLaks Я хочу отобразить его (этот IP) в представлении администратора. Таким образом, это может быть вектор атаки – TN888

+0

Включение этой проблемы в HTML. Хранить его в базе данных нет. (хотя вам нужно использовать параметры) – SLaks

ответ

1

Учитывая тип данных вы ожидаете это IP, вы должны просто проверить для этого конкретного типа данных Добавьте следующие строки в код

if(filter_var($ipaddress, FILTER_VALIDATE_IP)) return $ipaddress; 
else return "Unknown"; 

В основном это подтверждает, что это фактический IP, так что нет Аспекты атаки SQL Injection или даже XSS могли пройти через нее.