我有我的第一个网站。我遇到的首要任务之一是创建注册页面以注册新用户。我担心“安全”的方法。注册页面本质上是一个将数据库插入到用户表中的窗口。我担心脚本小子会抓住我的注册表格,并且用虚假插页无情地敲打数据库。
我研究过的几件事情都在努力:
Captchas:我真的希望能够在没有这些的情况下创建我的网站,因为从我的研究中看起来他们在拒绝机器人方面的效率大约是20%,同时保证激怒真正的人类用户。如果可能的话,我想让验证码在我的网站上不存在,或者如果看起来我正在编写脚本,则会动态显示。
IP欺骗 - 我玩弄了基于IP检查的想法,这样如果我从同一个IP获得大量连续的表单提交,我可以给他们一个验证码。但是,我的理解是,欺骗IP地址是微不足道的,并且检查来自适当欺骗的人的重复提交将是无效的。
通过电子邮件链接进行注册确认 - 您在论坛等上看到了很多内容。用户注册后,您向他们发送一个带有唯一令牌的确认链接,以验证他们是否有真正的电子邮箱并且没有放入一个假的(或者可能是真正错误的)。虽然这可能会增加一些关于验证用户是否“真实”的价值,但您已经将其插入到用户表中,因此脚本小孩在使用无用信息填充数据库时占优势。
网站开发人员如何防止脚本小子用大量无用用户向他们的数据库发送垃圾邮件?如果我上面做出的假设是正确的,我没有看到一种有效的方法来阻止它。在我想到它们之后,我已经玩弄了其他想法。我目前正在使用的搜索字词没有出现很多结果,所以如果这是一个过于夸张的主题我会道歉。
答案 0 :(得分:2)
我并不完全同意消除captcha
部分,但是你可以在蜜罐中捕获一些机器人。创建一个对最终用户不可见的输入字段,但对于机器人仍然存在。如果提交的表单包含fake-field
值,则忽略它,真正的用户无法看到不可见的字段! :)
例如:
// jQuery
$("#username").hide();
// HTML
<input type="text" name="real-username">
<input type="text" name="username" id="username">
// PHP
if (!empty($_REQUEST['username']))
die('Oops!');
请记住,您需要忽略username
字段,您的真实用户名在real-username
。
答案 1 :(得分:1)
我发现确认电子邮件,结合清理任务(删除所有未经确认的x天的注册)将有所帮助。您将无法阻止所有垃圾邮件注册,但数据库中的一些工作将有助于保持表格小。