2014-11-02 138 views
0

我想统计网页上的唯一身份访问者。我得到使用客户端的IP如下功能:客户端IP地址中的XSS攻击

$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()函数)攻击。

+0

您应该**从不** ** HTML转义您存储在数据库列中的值。将连接成该格式时,应该只能转义文本。你需要了解逃避手段。 – SLaks 2014-11-02 18:54:15

+0

@SLaks我想在管理员视图中显示它(此IP)。所以它有可能成为攻击的载体 – TN888 2014-11-02 18:55:25

+0

将它连接成HTML是一个问题。将它存储在数据库中不是。 (尽管你需要使用参数) – SLaks 2014-11-02 18:59:04

回答

1

考虑您期望的数据类型是IP,你应该简单地验证该特定数据类型 添加以下代码

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

这基本上验证了它是一个真正的IP,这样不SQL注入攻击媒介甚至XSS都可以通过它。