首页 > 解决方案 > 我的网络表单中的蜜罐似乎并没有阻止机器人提交

问题描述

我的网页上有一个表格。我经常从我认为是网络机器人的东西中得到空提交。为了阻止这种情况,我遵循了这篇文章中接受的答案的建议,并做了一个“蜂蜜陷阱”以停止自动提交。

我不确定我是否做错了什么,但我仍然每天大约收到一次空提交。

我做错了什么,还是有其他原因使这种方法现在可以工作?

我的 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');
}
?>

标签: phphtmlformsbotshoneypot

解决方案


使用isset()复选框而不是!empty(). 您的复选框的值为 1,因此它被视为不为空。

复选框的工作方式是,如果选中,则“设置”。

这更像是一个逻辑问题。

如果您想阻止机器人自动执行您的代码,请检查复选框是否“未”设置/单击并从那里处理。

逻辑:

  • 如果选中该复选框,则表示有人执行了该操作,然后继续。
  • 检查需要有人输入的空字段。

  • 如果一切顺利,请继续邮寄。

  • 如果未选中该复选框,请停止脚本继续运行,并可能显示有关它的消息并记录它。

您也可以将复选框设为“必需”,但使用服务器端方法来处理这一切。


推荐阅读