获取用户ip并检查阻止列表?

时间:2013-05-02 10:25:59

标签: php mysql

当用户访问我的网站时,在数据库中记录他们的IP地址,这是防范欺诈/垃圾邮件的预防措施。

我正在使用此查询存储用户ip

 $sql = "INSERT INTO ptb_sessions (session_id, user_ip, session_start, date, session_end) VALUES (NULL, '" . $_SERVER['REMOTE_ADDR'] . "', UTC_TIMESTAMP(), ADDDATE(), NULL);";
                mysql_query($sql, $connection);

我现在要做的是有一个脚本,在获取ip时,检查我的表ptb_blocked_users中是否存在此ip地址,如果是,则将用户重定向到被阻止的页面。

我可以做这样的事吗?

$result = mysql_query("SELECT id FROM mytable");
if(mysql_num_rows($result) == " . $_SERVER['REMOTE_ADDR'] . ") {
     // row not found, show page..
} else {
    // block page
}

有人可以告诉我如何做到这一点吗?

提前致谢

3 个答案:

答案 0 :(得分:1)

每次要检查时,都可以检查阻止数据库中是否存在ip,

    $ip_addres=$_SERVER['REMOTE_ADDR'];
    $query="SELECT `ip` FROM `ptb_blocked_users` WHERE user_ip='$ip_addres'";
    $result=mysql_query($query) or die('query failed');
    if(mysql_num_rows($result)>0)
    {
    //redirect to block page
    }
    else
    {
       //continue to script
    }

对于IPv4和IPv6支持,使用inet_pton()和inet_ntop(),这些都可以从PHP 5.1+开始使用,并且完全模仿等效的MySQL函数。

否则只需使用ip2long()和long2ip()。

ip2long()和long2ip()函数应该可以正常工作

示例:

var_dump(ip2long('209.85.227.147'));
var_dump(long2ip(3512066963));

使用:

INSERT table(ip) VALUES (INET_ATON('192.168.0.1')); /*ip = 3232235521*/
SELECT INET_NTOA(ip) As IPAddress FROM table; /*IPAddress = 192.168.0.1*/

答案 1 :(得分:1)

您应该花些时间分析数据。即使在会话中,IP地址也不是静态的。此外,无论何时使用IP地址,将它们视为数字都会更加简单。

虽然离傻瓜还有很长的路要走:

CREATE TABLE block_list
(
   trunc_ip INT(4),
   added TIMESTAMP
   PRIMARY KEY (trunc_ip)
);

阻止:

INSERT INTO block_list (trunc_ip)
VALUES (256*FLOOR(INET_ATON('" . $_SERVER['REMOTE_ADDR'] . "')/256);

并检查块:

SELECT 1 AS isblocked
FROM block_list
WHERE trunc_ip=(256*FLOOR(INET_ATON('" . $_SERVER['REMOTE_ADDR'] . "')/256);

...允许你遮蔽8位子网。

但有更好的解决方案,包括:

  • 需要经过验证的电子邮件地址
    • 将openId与电子邮件服务提供商一起使用 和/或
    • 在验证电子邮件之前不允许发布
  • Browser fingerprinting

答案 2 :(得分:0)

这样的事情应该有效

$sql = mysql_query("SELECT user_ip FROM ptb_blocked_users WHERE user_ip = '" . $_SERVER['REMOTE_ADDR'] . "' ");
if(mysql_num_rows($sql) > 0) {
 die(header("location: url"));
}