这种验证码类型是否适用于PHP表单?
<?php
session_start();
$text = rand(10000,99999);
$_SESSION["vercode"] = $text;
$height = 25;
$width = 53;
$image_p = imagecreate($width, $height);
$black = imagecolorallocate($image_p, 0, 0, 0);
$white = imagecolorallocate($image_p, 255, 255, 255);
$font_size = 50;
imagestring($image_p, $font_size, 5, 5, $text, $white);
imagejpeg($image_p, null, 80);
?>
然后我让它运行一个以这种方式连接到表单的IF语句。
$verify = $_POST['verification'];
if ($verify === $_SESSION['vercode'])
答案 0 :(得分:1)
很难说它是安全的。您正在创建一个简单的字符串并在图片中显示它。
这意味着如果“黑客”将使用OCR机制,他们可以轻松读取图像中的文本。所以文本本身应该是OCR无法读取的(例如可以通过在文本中添加模糊,扭曲或线条来解决)
我认为您应该查看热门图书馆,例如re-captcha及其提供的信息:http://www.google.com/recaptcha/learnmore
答案 1 :(得分:1)
这种验证码类型是否适用于PHP表单?
绝对不是。您的代码会创建一个黑色背景和白色文本的图像,所有图像都采用相同的字体和样式。没有什么能让机器人难以阅读这些文字。
为了使其符合机器人的要求,您需要扭曲文本并最好改变颜色。此外,如果您添加一些背景噪音以防止机器人轻松确定角色,它也会有所帮助。您可以使用已经解决所有这些问题的reCaptcha之类的东西,而不是自己编码。
您的图片示例:
答案 2 :(得分:1)
几乎任何定制的CAPTCHA都可以安全抵御机器人,因为没有机器人制造商能够花时间来破解机器人。因此,如果你有一些简单的网站,你就可以安全地使用这样的东西。
如果你计划制作一个插件或在一个机器人制造商解决验证码有利可图的网站上使用它,那么它就不会安全。因为文本很容易与实际代码相反。
但话又说回来,如果你自己为一个简单的网站制作一些东西,你可以更有创意,做一些用户甚至不知道的东西,因此不会被它惹恼。
也许在表单中创建一个文本字段,然后将其放在视口之外。没有用户会填写此字段,但处理表单的机器人将会。因此,您只需在服务器端检查字段是否有值。如果是的话,那就是机器人。
另外,如果你自己做点什么。不要给它一个易于理解的名称,如'CAPTCHA',但使用可能是实际领域的东西。然后就不会有任何自动尝试绕过它。