我的网页上有一个表单。我经常收到来自我认为是网络机器人的空提交。为了阻止这种情况,我遵循了这篇帖子中被接受的答案的建议,并制作了一个"蜂蜜陷阱"来阻止自动提交。
我不确定我是否做错了什么,但我仍然每天收到一次空的投稿。
我做错了什么吗?或者还有其他原因可以让这种方法奏效吗?
我的HTML:
<form action="post.php" method="post">
<label for="email"></label>
<input type="email" placeholder="Enter your email address..."
name="email" required>
<input type="checkbox" name="contact_me_by_fax_only" value="1" style="display:none !important" tabindex="-1" autocomplete="off">
<button type="submit" class="signupbtn">Sign Up</button>
</form>
我的PHP:
<?PHP
$honeypot = FALSE;
$email = $_POST["email"];
if (!empty($_REQUEST['contact_me_by_fax_only']) && (bool) $_REQUEST['contact_me_by_fax_only'] == TRUE) {
$honeypot = TRUE;
log_spambot($_REQUEST);
# treat as spambot
} else {
mail("my@email.com", "Message from $email", "message here");
header('Location: thanks.html');
}
?>
最好将isset()
与复选框一起使用,而不是使用!empty()
。您的复选框的值为1,因此它被视为不为空。
复选框的工作方式是,如果选中了它,那么它就是"设置"的。
这更多是一个逻辑问题。
如果你想阻止机器人自动执行你的代码,请检查复选框是否"未"设置/单击,然后从那里进行处理。
逻辑:
- 如果复选框被选中,则说明有人执行了该操作,然后继续
-
检查需要有人输入的空字段。
-
如果一切顺利,请继续邮寄。
-
如果没有选中复选框,请停止脚本继续执行,并可能显示有关它的消息并将其记录下来。
您也可以将复选框设为"必需",但使用服务器端方法来处理所有复选框。