问题描述
|
我正在构建一个PHP投票系统,我想限制每个用户的投票数。
那么,区分我网站上用户的最佳方法是什么?
我可以通过cookie或会话来跟踪它们,但这似乎不太有效,因为如果用户删除其cookie,他将通过安全测试。我知道不会有100%的解决方案,但是我想遵循此处的最佳做法。
有什么帮助吗?
解决方法
IP地址,Cookie和会话。尝试所有三个。
没有确定的方法,但是将这三个方法结合使用是最好的。
另外,您可以尝试进行电子邮件地址验证,因为这会使人流连忘返,但这也将大大降低给定用户想要投票的可能性。
,此处未提及的选项是使用Flash本地存储。缺点是它需要Flash。好处是很难清洗。
,许多网站使人们注册一个帐户进行投票,以便他们的投票可以与该ID相关联并受到限制。
另一种选择是跟踪IP地址。尽管这并不完美(可能会欺骗IP地址,人们的IP地址有时会发生变化,每个NAT仅1票),但这总比没有好。
第三种选择是将IP地址与浏览器的用户代理字符串组合在一起,该字符串仍然存在一些漏洞,但距离越来越近。
,我问了一个类似的问题,可能会提供一些见解:
无需注册即可实施投票系统
编辑:听起来像它实际上非常相似。为了给您一些视角,我实际上实际上是重新编写了代码的基础,以使投票与经过身份验证的用户帐户绑定在一起,因为没有其他方法可以肯定地完成此操作,这将不会被利用。
,您可以使用get_browser和IP地址,对其进行记录并在每次投票时进行比较。您无需记录get_browser中的所有值,可以对其进行哈希处理(“ 0”)并存储哈希值。
尝试下面的get_browser代码:
<?php
$browser = get_browser(null,true);
print_r($browser);
?>
它将返回如下内容:
Array
(
[browser_name_regex] => ^mozilla/5\\.0 (windows; .; windows nt 5\\.1; .*rv:.*) gecko/.* firefox/0\\.9.*$
[browser_name_pattern] => Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:*) Gecko/* */Firefox/0.9*
[parent] => Firefox 0.9
[platform] => WinXP
[browser] => Firefox
[version] => 0.9
[majorver] => 0
[minorver] => 9
[cssversion] => 2
[frames] => 1
[iframes] => 1
[tables] => 1
[cookies] => 1
[backgroundsounds] =>
[vbscript] =>
[javascript] => 1
[javaapplets] => 1
[activexcontrols] =>
[cdf] =>
[aol] =>
[beta] => 1
[win16] =>
[crawler] =>
[stripper] =>
[wap] =>
[netclr] =>
)
,您可以从环境变量“ 3”中获取用户的IP地址。从理论上讲,每个用户都有一个唯一的IP地址。实际上,存在几个问题:同一Internet连接上的多个用户将具有相同的IP,并且IP由服务提供商更改和回收,因此最终将导致一些错误标识的重复用户。还有更改IP的方法,因此仍然可以稍作努力来欺骗系统。
如果您正在处理的是玩具应用程序,那么这些并不是严重的问题。如果这不是玩具应用程序,那么几乎可以肯定,找到一个现有的解决方案而不是尝试制作自己的解决方案会更好。我不能特别推荐任何东西,但是我敢肯定那里有很多东西。