Это хороший способ поймать ботов? - PullRequest
0 голосов
/ 19 января 2010

Достаточно ли этого метода?

<?php

// User pressed "Register"
if (!empty($_POST['name']) && $_POST['email']) {


    if (!empty($_POST['antispam'])) 
        exit("bye");

    }

?>

<form>

<input type="hidden" name="antispam" value="" />

Accname: <input type="text" name="name" value="" />
Email: <input type="text" name="email" value="" />

......

</form>

Ответы [ 4 ]

4 голосов
/ 19 января 2010

Во всех основных смыслах идеи, конечно. Единственное, что я бы порекомендовал для вашей простой реализации, - это то, что большинство сканеров спама, которые вы пытаетесь заблокировать, ищут поля с именами «имя пользователя», «имя», «пользователь» и т. Д.

Итак, вместо того, чтобы называть вашу приманку "антиспамом", я бы назвал ее "именем пользователя" или чем-то подобным, что не противоречит вашей существующей форме.

2 голосов
/ 19 января 2010

вероятно, лучшее имя для поля формы, предназначенного для запуска спам-бота, будет url

Вероятность того, что бот проанализирует html для атрибутов type=text или textarea tag a и игнорирует все остальные, вполне разумна.

Ваши шансы поймать спамбота могут быть улучшены с помощью нескольких дополнительных строк кода:

styles.css :

#commentUrl {
    display: none;
}

script.js

function setFlag() {
    document.getElementById('commentUrl').value = 'Javascript check ok';
}

form.html

<form onsubmit="setFlag();" method="post" action="comment.php">
    <label for="commentName">Accname:</label>
      <input type="text" id="commentName" name="comment_name" value="" />

    <label for="commentEmail">Email:</label>
      <input type="text" id="commentEmail" name="comment_email" value="" />

    <label for="commentUrl">Url:</label>
      <input type="text" id="commentUrl" name="comment_url" value="http://" />
</form>

Comment.php

<?php

   if ($_POST['comment_url'] <> 'Javascript check ok' && $_POST['comment_url'] <> 'http://') {
       // Let's increase their server load.
       header('Location: http://' . $_SERVER['REMOTE_ADDR'] . '/', 307); 
   }
?>

Поскольку вы используете три разных языка, вы значительно повышаете шансы поймать спамера.
Вы можете улучшить javascript, динамически добавив <link rel="stylesheet" динамически к DOM, например.

1 голос
/ 19 января 2010

Я бы не использовал скрытое поле, поскольку боты могли бы искать только элементы type="text". Имена должны быть общими, но бесполезными, например:

  • Имя
  • 1007 * Фамилия *
  • Адрес электронной почты
  • имя пользователя
  • пароль
  • био
  • описание

Вы должны изменить свой ввод с

<input type="hidden" name="antispam" value="" />

к чему-то еще по линии

<input type="text" name="username" value="" style="display:none; height: 0; width: 0; border: none; background: transparent; margin: 0; padding: 0;" />
1 голос
/ 19 января 2010

Я бы не советовал делать тип ввода скрытым или иметь в нем что-то со спамом. Лучшим способом было бы дать ему нейтральное имя (возможно, "message") и скрыть его со страницы через css. Кроме того, я бы измерил, сколько времени потребовалось для заполнения формы (поскольку это будет очень быстро или очень медленно для роботов), добавив поле отметки времени (и снова присвоив ему нейтральное имя и, возможно, закодировав его).

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