验证码是目前保护免费格式的最常见方式之一。它最初不是为了保护数据安全,而是为了防止垃圾邮件,并承认它是一个人。
然而,它是由机器生成的,所以它并不总是完美的,但验证码测试的成功率大约为99%,只有1%的图像可以被一个制作精良的垃圾邮件机器人破译。
还有更多的选择,例如我使用这个解决方案。
如果验证码测试可以被解决,用户可能是人类。但考虑一下无法解决任务的用户,特别是盲人用户,也是一件好事。这是一个很好的解决方案,可以结合多种可能的测试(特别是语音预取)。然而,目前机器的语音识别比读取图像的效率高得多。因此,这种解决方案并不总是理想的。
通常情况下,只需生成一个具有一定尺寸的空白图像,并在其中清晰地输入几个字符即可,无需进一步编辑。认真的!大多数垃圾邮件机器人是愚蠢的,无法攻击具有这种保护的通用表格,尽管它是完全可读的文本,更好的OCR可以完美地转录。
产生的图像可能看起来像这样。
<img src="captcha.php" alt="ukázková captcha">
试着刷新几次页面,你会发现每次的代码都会随机变化。为了演示,它只是生成而没有保存,所以在你加载后立即被删除。
我使用PHPGD库解决了源代码,几乎所有的PHP安装和主机都有这个库。
Header("内容类型:image/png");$obr = ImageCreate(100, 35);$pozadi = ImageColorAllocate ($obr, 219, 28, 49); //背景色定义$bila = ImageColorAllocate ($obr, 255, 255, 255); //文本的白颜色定义$styl = array ($pozadi);ImageSetStyle ($obr, $styl);$nahodne_cislo = rand(11111,99999); //抽出一个5个字符长的随机数字imagestring($obr, 5, 25, 10, $nahodne_cislo, $bila); //绘制文本的功能(在此为数字)。ImagePNG($obr); //将图像生成到内存中并进行渲染ImageDestroy($obr); //从内存中删除图像(它将不再需要,因为它只生成一次)。
然后,渲染图像只是一个HTML的问题。
<img src="captcha.php">
请注意,如果不作进一步的修改,这个脚本本身是不能发挥作用的。它只是作为一个示范,生成一个简单的图像。
验证码测试是相当可靠的,但很烦人,也很耗时。有时它们是不可读的,所以让用户选择使用javascript加载不同的图片是很好的,这样整个页面就不必重新加载,所有的东西都要重新填入。
请记住。对人类来说是微不足道的任务,对机器来说可能永远无法实现。这就是为什么即使是这种原始的验证码与完全可读的文本也能防止一半以上的垃圾邮件。
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | zh