Мед горшок в моей веб-форме, кажется, не останавливает представления ботов - PullRequest
1 голос
/ 27 октября 2019

У меня есть форма на моей веб-странице. Я часто получаю пустое представление от того, что я предполагаю, являются веб-ботами. Чтобы прекратить это, я последовал совету принятого ответа на этом посте и сделал "медовую ловушку", чтобы остановить автоматические представления.

Я не уверен, что ясделал что-то не так, но я по-прежнему получаю пустые сообщения примерно раз в день.

Я сделал что-то не так или есть другая причина, по которой этот метод теперь будет работать?

Мой 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');
}
?>

1 Ответ

2 голосов
/ 27 октября 2019

Лучше использовать isset() с флажками, а не !empty(). Ваш флажок имеет значение 1, поэтому он считается не пустым.

Способ работы флажков заключается в том, что если он установлен, то он «установлен».

Это скорее логическая проблема.

Если вы хотите, чтобы бот автоматически не выполнял ваш код, проверьте, не установлен ли флажок «не» и не нажали ли вы, и обработайте его изтам.

Логика:

  • Если флажок установлен, то это действие совершил человек, а затем продолжить.
  • Проверить наличие пустых полей, для которых потребуетсякто-то, чтобы набрать его.

  • Если все получилось, продолжайте рассылку.

  • Если флажок не установлен, остановите сценарий изПойдем дальше и, возможно, покажем сообщение об этом и зарегистрируем его.

Вы также можете сделать флажок «обязательным», но с помощью серверного метода для обработки всего этого.

...