需要帮助添加一些验证码到联系表格中。

4

您好,我是新手PHP开发者,想请教一些问题。 我已经创建了一个联系表单,现在想添加验证码。我已经创建了一些带有噪点数字的gif图片,并将它们命名为code_01.gif代表数字1,code_02.gif代表数字2等等。我已经把其中一些静态地放在表单上,以展示的方式显示如下:

<img src="images/code_01.gif" />
<img src="images/code_07.gif" />
<img src="images/code_01.gif" />
<img src="images/code_08.gif" />
<img src="images/code_03.gif" />
<img src="images/code_07.gif" />
<input name="captcha" type="text" id="captcha" />

我希望添加一些功能,每次随机显示图像代码,并检查输入是否与显示的6位数字匹配。
任何帮助都将不胜感激。

你有搜索过验证码吗?以及如何创建它们的方法? - Jon Taylor
@Lykos22,请查看我的答案,看看是否可以? - Praveen Kumar Purushothaman
3个回答

5

简单的PHP验证码

这是你将会使用过的最简单的验证码脚本之一。虽然它不会模糊文本,但对于许多需要低级别验证码解决方案的人来说,它将很好地完成其工作。此脚本几乎不需要任何设置。唯一的依赖项是PHP GD库。

它可以像这样简单地使用,但也可以进行配置:

<?php

session_start();
include("captcha.php");
$_SESSION['captcha'] = captcha();

echo '<img src="' . $_SESSION['captcha']['image_src'] . '" alt="CAPTCHA" />';

?>

演示: http://labs.abeautifulsite.net/simple-php-captcha/

这是一个简单的PHP验证码演示。通过使用此演示,您可以轻松了解如何创建和实现基本的验证码系统。在使用时,请注意确保所有HTML标签按照原样保留,以确保功能正常。

3
您可以使用这个: Securimage Securimage是一款开源免费的PHP验证码脚本,可以生成复杂的图片和验证码来保护表单免受垃圾邮件和滥用。它可以轻松地添加到您网站上现有的表单中,以提供对垃圾机器人的保护。只要您安装了PHP并且PHP支持GD,它就可以在大多数Web服务器上运行。Securimage可以执行从生成验证码图像到验证输入码的所有操作。对于视力障碍者,听得见的代码可以通过Flash流式传输到浏览器。

-1

这是我很久以前发现的一个简单的数学验证码类型的东西。
优点:
- 没有图像,因此使用的带宽更少。
- 没有外部依赖。

流程过程

form.php中:

  1. 选择一个随机数$n1
  2. 选择另一个随机数$n2
  3. 使用各种数学运算计算$n1$n2,并将其存储为$result,使得结果数字不可预测且与$n1+$n2不对齐
  4. 输出"What is $n1 + $n2?"
  5. 要求用户输入步骤4中提出的问题的答案。
  6. $result作为表单中的隐藏值添加。
  7. 提交后,check.php处理$_POST值。

check.php中:

  1. 如果 $_POST["answer"] 已设置,则将其存储在 $answer
  2. 以与 form.php 的第3步相同的方式计算 $answer
  3. 现在,如果 $answer 等于 $_POST["result"],则验证用户是人类。

请记住,$answer 是用户提交的答案,而 $result 是我们对 $answer 进行数学运算后得出的结果。

代码:

File:form.php

<?php

$n1 = rand(1,15);
$n2 = rand(1,15);
//start making our result unpredictable & non-aligned with hidden value
$result = $n1+$n2;
$result = ($result*3)-2;
$result = ($result+4)*5;
$question="what is $n1 + $n2?";
?>
<form method="post" action="check.php">
<?php echo $question.PHP_EOL; ?>
<input name="answer" type="text"><br />
<input type="hidden" name="result" value="<?php echo $result; ?>">
</form>

File:check.php

<?php

if(isset($_POST["answer")){
    $answer = $_POST["answer"];
    // start doing same math on $answer
    $answer = ($answer*3)-2;
    $answer = ($answer+4)*5;
    if($answer == $_POST["result"]{
        // echo Hurray, you are Human..
        // Do anything here.. 
    }else{
        echo "Wrong Answer";
    }

在http://codepad.org/2MtULNhZ上实现逻辑

关键在于使编码和解码公式更加复杂。这样,查看隐藏表单值 结果问题 的人就不应该发现它们之间的关系。


请检查您的答案,因为它充满了错误。我将进行编辑以纠正语法错误,但我不知道这是否可行。如果我只是创建一个机器人从HTML中读取“什么是”后面的两个数字并提交它们的总和呢?! - Daniel Szalay
@DanielSzalay 我在我的回答中突出了词汇“SIMPLE”。这只是一种基本技术。顺便说一句,我没有看到任何语法错误。而且我将在我的回答中添加一个 Flow Process。使破解更加困难,然后再破解这个更难的破解,这是一场猫鼠游戏。因此,如果您创建一个机器人从HTML中读取“What is”后面的两个数字,那么就可以使用数字图像而不是纯文本数字。然后您可以找到其他方法,这样过程就会继续下去... - DavChana

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接