如何限制一个人只能注册一个账号(防注册机)?IP?EMAIL?验证马?
EMAIL没用,可以随便注册很多,验证链接也没用。
根据IP限制的话,动态IP和共享IP,也不行。
验证码,貌似无用,上次看到一个腾讯的验证码都能识别了。
费尽心思研究半天验证码分分钟就被识别麻烦,用户输入也麻烦。
也不能跟用户要身份证号码。有什么办法可以识别一个人呢,让一个人只能拥有一个ID。
还要尽量减少用户需要输入的信息。
[解决办法]
强调两个设计原则:
1. 所有的安全防护都是“相对”的,没有“绝对的严密”。
2. 明确你的首要目标,根据目标确定方法。
考察一下楼主的原始需求,其实是“防注册机”,是吧?
并不是要“实名”,也不一定要求“每个 IP 只能注册一个号”,这些都是拿来作为“方法”的,而这些方法显然并不是很有效。
其实最有效的,还是“验证码”。别觉得验证码那么容易破解,首先看你的网站是否有那么高的价值让人家专门花心思来破解,如果真是很有价值的话,你肯定也会有足够的资金支持来完善验证码的实现了 :)
另外,邮箱验证也可以作为一个简单有效的辅助手段。
[解决办法]
所谓“防注册机”,从原理上讲大概是这样的:在执行一个关键任务(比如注册一个帐号)之前,在页面上设计一个只有真人才能完成的交互任务(比如从一个图片中识别出几个字符),从而得到一个令牌(比如验证码),只有把这个令牌一并提交到服务器,才能启动关键任务。
常见的图片验证码,是一个最简单的实现。如果发挥想象,尽可以创造性地发明各种实现方法。比如我看到有的网站在发帖前要回答一个问题,可能是算术题,也可能是其它问题,对于真人来说,很容易输入答案,而对于“机器人”来说,就有一定难度了(当然如果有黑客专门针对它进行穷举和识别,也是有希望破解的)。
再比如我还见过有的网站是播放一段声音,然后要求用户输入听到的单词。
另外像 Android 手机上的一种“九宫格划屏解锁”的交互方式,也可以借用来防注册机:在页面上显示一个或一组图片,再以文字方式(文字也可以显示在图片里)指导用户做一系列点击操作,通过 AJAX 的方式把鼠标动作发送到服务器,如果正确的话,服务器就向客户端提供一个令牌。
这些实现方式都有一个特点(包括图片验证码),只要你的基本逻辑实现了,即使被破解了,那么只要对算法稍做调整,就可以使原有的破解失效。安全工作没有一劳永逸的。