Как выполнить PHP в моем спамботе honeypot - PullRequest
0 голосов
/ 05 октября 2019

Я хочу разместить на своем веб-сайте honeypot, чтобы спам-боты не заполняли мою форму.

Я нашел этот ответ , который кажется полезным. Он советует включить невидимый флажок на вашей странице:

<input
  type="checkbox"
  name="contact_me_by_fax_only"
  value="1"
  style="display:none !important"
  tabindex="-1"
  autocomplete="off"
>

Но затем, PHP предлагается проверить, был ли флажок установлен:

$honeypot = FALSE;
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 {
    # process as normal
}

Я не использовал многоPHP раньше. Мои вопросы:

  1. Могу ли я просто поместить этот PHP в свой HTML-код с окружающими тегами <?php ?>?
  2. Если так, имеет ли значение, куда я помещаю PHP? Должно ли это быть после формы (например)?
  3. В той части PHP, которая гласит #process as normal, нужно ли что-то здесь вводить?
  4. Или я долженпоместить PHP в мой файл post.php, который я создал для публикации своей формы?

Если это поможет, часть формы моего HTML-кода:

<form action="post.php" method="post">
   </br>
   <label for="email"></label>
   <input type="email" placeholder="Enter your email address..."
             name="email" required>
    <button type="submit" class="signupbtn">Sign Up</button>
    <input type="checkbox" name="contact_me_by_fax_only"
      value="1" style="display:none !important" tabindex="-1" autocomplete="off">
</form>

Я пытаюсь следовать ответу на этот вопрос. Я до сих пор не уверен, куда все должно идти. Я не понимаю, когда я говорю код do , когда это человеческий ответ;Я хочу, чтобы он отправил форму, но я не знаю, как она соотносится с php.

<html>

  <head>

    <title>Page Title</title>
    <link href="https://fonts.googleapis.com/css?family=Quicksand"
          rel="stylesheet">
    <link rel="stylesheet" type="text/css" href="style.css">
    <link rel="shortcut icon" href="fav.ico" >
    <meta name="description" content="">
  </head>

  <body>

    <div class="home_pic">
      <img border="0" style="border-color: black" src="pic1.png"
           height="700px">
    </div>
    <div class="home_text">
        Some words for the website
    </div>

    <?php
    if (isset($_REQUEST['contact_me_by_fax_only']) && (bool)
    $_REQUEST['contact_me_by_fax_only'] == TRUE) {
       $honeypot = TRUE;
       log_spambot($_REQUEST);
       // treat as spambot  -- I don't need it to *do* anything if spambot
    ?>

    <?php
        exit();  // all done if a spambot
    } else {
        // process as normal -- here we will use a function, note that in PHP
        // scope rules will hide most global variables from the function!
        process_human_response();
    }
    function process_human_response()
    {

    <!--DOES THE FORM GO IN HERE NOW?-->

    <form action="post.php" method="post">
          </br>SIGN UP:
          <label for="email"></label>
          <input type="email" placeholder="Enter your email address..."
                 name="email" required>
          <button type="submit" class="signupbtn">Sign Up</button>
          <input type="checkbox" name="contact_me_by_fax_only"
          value="1" style="display:none !important" tabindex="-1" autocomplete="off">
    </form>

    ?>

  </body>

</html>

Извините, я очень запутался.

1 Ответ

1 голос
/ 05 октября 2019

В принятом ответе на Лучшая реализация Honeypot (Форма Анти-Спам)

Это PHP для страницы обработки, которую отправляет ваша форма.

Копированиекод из поста Николаса Саммерса, я добавлю некоторый пример HTML, чтобы прояснить его.

<?php
$honeypot = FALSE;
if (!empty($_REQUEST['contact_me_by_fax_only']) && (bool) 
$_REQUEST['contact_me_by_fax_only'] == TRUE) {
    $honeypot = TRUE;
    log_spambot($_REQUEST);
    // treat as spambot  -- here we will place the HTML "inline"
?>
<html>
<body>
<p>Tasty spam, thanks!</p>
</body>
</html>
<?php
    exit();  // all done if a spambot
} else {
    // process as normal -- here we will use a function, note that in PHP
    // scope rules will hide most global variables from the function!
    process_human_response();
}

function process_human_response()
{
   //... get data from $_REQUEST
   //... process data
?>
<html>
<body>
<p>Thank you good human!</p>
</body>
</html> 

Это показывает размещение вашего кода и HTML "inline" на глобальном уровне для первого случая (спам) и вфункция для людей, просто чтобы показать другой путь.


Как уже отмечалось, код часто короче и проще в обслуживании, если вы не дублируете какой-либо общий HTML-код, например:

Общее начало страницы:

<html>
<head> <!-- and shared CSS, JS files here --> </head>
<body>

Некоторая логика PHP, позволяющая определить, является ли она спамботом

<?php
if (isset($_REQUEST['contact_me_by_fax_only']) && (bool) 
$_REQUEST['contact_me_by_fax_only'] == TRUE) {
    $honeypot = TRUE;
    log_spambot($_REQUEST);
    // treat as spambot  -- here we will place the HTML "inline"
?>

Включить HTML-ответ для спамбота, выполненный "inline". Поскольку в случае PHP-кода «if» этот HTML-код будет отправляться в браузер только в том случае, если тест if равен true (= spambot)

<p>Tasty spam, thanks!</p>

Продолжить код PHP для ifcase, затем переключитесь на else case.

<?php
    exit();  // all done if a spambot
} else {
    // process as normal -- here we will use a function, note that in PHP
    // scope rules will hide most global variables from the function!
    process_human_response();
}
?>

Общий HTML для конца страницы

</body>
</html>

Функция, вызываемая для обработки ответа человека

function process_human_response()
{
   //... get data from $_REQUEST
   //... process data
?>

Этот HTML-код находится внутри функции, поэтому он отправляется только в том случае, если эта функция вызывается

<p>Thank you good human!</p>

Завершить функцию

<?php
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...