【发布时间】:2012-10-31 21:39:26
【问题描述】:
我一直在收集有关如何防止登录页面上的暴力攻击或防止创建多个帐户的骚扰的信息。
我得出结论(感谢 Stackoverflow 的你们),最好的方法是使用验证码。
但难以阅读的验证码或重音字符可能会阻止用户使用网站。
所以,我发现了一个易于使用的小脚本,适合我的网站。这是一个简单的数学验证码,建议将 0 到 10 的 2 个数字相加。它显示单词 'one' 'two' 'three' ...而不是数字。
我的问题是:
1) 这个小验证码本身是否提供足够的安全性?
2) 我集成它的方式安全吗? (有什么办法绕过它?)
为了避免粘贴800行代码我做了一个总结,希望清楚。
验证码脚本:
$n1 = mt_rand(0,10);
$n2 = mt_rand(0,10);
$fig = array('zero','one','two','three','four','five','six','seven','eight','nine','ten');
$result = $n1 + $n2;
$sentence = $fig[$n1] .' plus '.$fig[$n2];
$_SESSION['captcha'] = $result;
$captcha_label = "<label for='captcha' >How much does ".$sentence."make?</label>";
echo $captcha_label."</label><input type='text' name='captcha' value=''/><br />";
echo "<input type='submit' name='create' value='create account'>";
页数:
- form.php:
所有'创建帐户'输入字段+验证码
=> 测试
-
test.php:
if($_POST['captcha'] != $_SESSION['captcha']){}
$_SESSION['captcha_control'] = "false";
然后所有'创建帐户' $_POSTS 都经过注入测试
如果其中任何一个或验证码返回 "false" ,脚本将转向 => question.php
- 问题.php:
与所有“错误字段”突出显示的初始表单相呼应
并显示一个新的验证码,是对还是错。
验证 => 返回 test.php
非常感谢。
【问题讨论】:
-
值得花时间和精力去做这件事吗?
-
重新发明轮子总是一个坏主意。
-
验证码应该很容易被人类解决,但计算机却不是那么容易解决。您的验证码会阻止大多数垃圾邮件发送者,因为它是一种自制的解决方案,但如果有人愿意,他们可以在一个小时左右的时间内破解它。我会坚持使用 reCAPTHCA。
-
@SunnyOne: google.com/recaptcha
-
@duskwuff 任何在后端使用人工的垃圾邮件系统都会使验证码系统失效。
标签: php security captcha brute-force