自定义PHP验证码
我写了一个php函数来显示一个随机方程。如果未提供正确答案,则提交失败。方程式如下: [随机数字或文本编号][随机选择+,-,x][随机数字或文本编号]= 所以你可能会看到: 8+2=?,或7-4=?,等等 我已经手动测试过了,它似乎工作得很好。我无法正确回答验证码。然而,尽管有此验证码,还是有人或物在发布垃圾邮件所以我的问题是,有没有解决这个问题的方案? 这是我的表格:自定义PHP验证码,php,captcha,Php,Captcha,我写了一个php函数来显示一个随机方程。如果未提供正确答案,则提交失败。方程式如下: [随机数字或文本编号][随机选择+,-,x][随机数字或文本编号]= 所以你可能会看到: 8+2=?,或7-4=?,等等 我已经手动测试过了,它似乎工作得很好。我无法正确回答验证码。然而,尽管有此验证码,还是有人或物在发布垃圾邮件所以我的问题是,有没有解决这个问题的方案? 这是我的表格: <form action="scripts/handler_post.php" method="post" id="g
<form action="scripts/handler_post.php" method="post" id="gb_form">
<h3>Leave us a comment:</h3><br />
<div id="form_msg"><?php echo $msg; ?></div>
<input type="text" name="name" value="Your Name" />
<textarea name="message">Your Message</textarea>
<?php include('includes/bmw_captcha.php'); ?>
<div style="color:red; font-size:90%;">*What does <?php echo $array_num1[1] . " " . $array_calculation[0] . " " . $array_num2[1] . " = "; ?>
<input type='text' maxlength='2' name='captcha' style="color:#640513; width:25px;" />?</div>
<div><span style="font:italic 90% Arial; color:#666;">(For security purposes, please answer this CAPTCHA problem.)</span></div>
<input type="hidden" name="captcha_answer" value="<?php echo $array_calculation[1]; ?>" />
<input type="submit" name="submit_button" value="Post" />
</form>
您应该将验证码的答案存储在会话变量中。通过表单以明文形式发送,机器人可以将字段设置为它想要的任何值。机器人程序通常会将所有未知字段设置为某个字符串,如ijhsg87dfb34,因此如果它将
captcha
和captcha\u answer
字段设置为相同的值,则会成功 您可以尝试非验证码安全表单。检查这个
一个非常简单的方法是使用一个隐藏字段,在处理帖子的脚本中,你检查该字段是否已填写,如果已填写,那么它是一个机器人等,因为普通用户永远看不到该字段,而机器人等只是盲目地填写每个字段。答案也在表单中吗?如果是这样的话,改变隐藏字段并不困难,您可以尝试以下方法:。
// submitted values
$name = clean_string( $_POST['name'] );
$message = clean_string( $_POST['message'] );
$captcha = clean_string( $_POST['captcha'] );
$captcha_ans= clean_string( $_POST['captcha_answer'] );
// check if name var is empty or contains digits
if( empty($name) || (strcspn( $name, '0123456789' ) != strlen( $name )) )
{ header( 'Location: /guestbook.php?msg=n' ); }
else if( empty($message) )
{ header( 'Location: /guestbook.php?msg=m' ); }
else if( empty($captcha) || $captcha != $captcha_ans )
{ header( 'Location: /guestbook.php?msg=cap' ); }
else
{
$query = "
INSERT INTO $table_posts ( id, name, message, timestamp )
VALUES( 0, \"$name\", \"$message\", now() )
";
$result = $db_connect->query( $query ); // execute the query
if( $result )
{
header('Location: ../guestbook.php?msg=1');
}
else
header('Location: ../guestbook.php?msg=2');
}