我需要为每个IP地址允许一个帐户吗?

时间:2012-03-16 03:42:02

标签: php mysql

所以我使用以下内容来获取用户的IP地址:

$ip=$_SERVER['REMOTE_ADDR'];

然后我通过在注册时将其添加到数据库来关注它:

$sql="INSERT INTO members (FirstName,LastName,Email,Phone,Address,City,State,Zip,Pin,IP_Address) VALUES ('$_POST[FirstName]','$_POST[LastName]','$_POST[Email]','$_POST[Phone]','$_POST[Address]','$_POST[City]','$_POST[State]','$_POST[Zip]','$_POST[pin]','" . $ip . "')";

它在正确的字段中插入IP地址并抓取正确的字段,但是如果IP地址存在,我希望能够将其置错。

每个IP地址只允许一个帐户,因此人们不会将帐户创建表单垃圾邮件。

通过IP地址限制用户的评论显然不是最好的方法,因为它会阻止网络使用像学校/图书馆这样的服务。

在不使用电子邮件地址的情况下将用户限制为1个帐户的最佳方法是什么,因为他们可以只拥有一个地址并设置1 @ domain.com - 2@domain.com - 3@domain.com ...等。

2 个答案:

答案 0 :(得分:1)

在IP_Address列上创建唯一索引:

SQL:

CREATE UNIQUE INDEX one_user_per_ip ON members (IP_Address);

正如其他人所说,这种约束可能没有你想象的那么有用。 一旦IPV6上线并且每个人都获得了大量地址,它就会完全停止担心。

使用验证码更有可能阻止垃圾邮件。

答案 1 :(得分:1)

首先应该从你的问题中解决几件事。

1)插入未经过滤的$ _POST值只需要SQL injection attack。至少,使用real_escape_string

2)防止IP地址注册两次将使您的网站/服务无法被这么多潜在访问者访问。 ISP的共享IP环境和动态IP分配只是几个用户无意中被阻止的常见示例。

您的问题的答案是使用select语句并将数据库值与相关的新IP进行比较。为您的IP列提供唯一索引。代码如下:

$conn = new mysqli(/*db info*/);
$res = $conn->query("SELECT $ip FROM members WHERE IP_Address='$ip'");

if (!$res->num_rows) {/*ip wasn't found so insert a new row*/}
else {/*ip was found so return error message*/}