PHP将验证码保护添加到Web表单
时间:2020-01-09 10:42:59 来源:igfitidea点击:
如何判断PHP表单是由人还是脚本提交的?
您需要使用验证码,这只是您用来确保响应不是由机器人生成的一种质询-响应测试。
有很多为PHP提供的库。
我建议使用reCAPTCHA PHP库,该库提供了一种在您的PHP表单上放置验证码的简单方法。
它可以阻止机器人滥用它。
您需要使用reCAPTCHA API。
步骤1:获取reCAPTCHA API库
访问reCAPTCHA网站以注册API密钥(免费)。
请记下您的私钥和公钥。
步骤2:下载并安装reCAPTCHA PHP
从Google代码仓库下载reCAPTCHA库:
$ cd /tmp $ wget http://recaptcha.googlecode.com/files/recaptcha-php-1.10.zip
解压缩recaptcha-php-1.10.zip,执行:
$ unzip recaptcha-php-1.10.zip
最后,将recaptchalib.php复制到表单所在的目录。
例如如果您的contact.php位于/var/www/html,则复制recaptchalib.php如下:
$ cp /tmp/recaptcha-php-1.10/recaptchalib.php /var/www/html
步骤3:测试
创建一个php脚本,如下所示:
<html> <head> <title>Sample Email Form</title> </head> <body> <script> function checkForm() { if (document.forms.myphpform.elements['yname'].value.length == 0) { alert('Please enter a value for the "Name" field'); return false; } if (document.forms.myphpform.elements['email'].value.length == 0) { alert('Please enter a value for the "Email" field'); return false; } if (document.forms.myphpform.elements['message'].value.length == 0) { alert('Please enter a value for the "Message" field'); return false; } return true; } </script> <form action="?done=1" method="post" name="myphpform" onSubmit="return checkForm()" > <table border=0> <tr> <td>Your Name:</td> <td><input type="text" name="yname" size="50" maxlength="50" value="" /></td> </tr> <tr> <td>Your Email:</td> <td><input type="text" name="email" size="50" maxlength="50" value="" /></td> </tr> <tr> <td>Message:</td> <td><input type="text" name="message" size="50" maxlength="50" value="" /></td> </tr> <tr> <td>Are you a human being?</td> <td> <?php @require_once('recaptchalib.php'); $publickey = "YOUR-PUBLIC-KEY"; $privatekey = "YOUR-PRIVATE-KEY"; $resp = null; $error = null; # are we submitting the page? if ($_POST["submit"]) { $resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); if ($resp->is_valid) { $to="[email protected]"; $subject="Feedback from example.com"; $body=" Message via webform: Name: " .$_POST["yname"] . "\n Email: " .$_POST["email"] . "\n Message: " .$_POST["message"] . "\n"; /* send email */ mail($to,$subject,$body); echo "<p>Email sent!</p>"; exit(1); } else { echo "Sorry cannot send email as you've failed to provide correct captcha! Try again..."; } } echo recaptcha_get_html($publickey, $error); ?> <td/> </tr> <tr> <td> </td> <td><input type="submit" name="submit" value="submit" /></td> </tr> </table> </form> </body> </html>