Хорошая безопасность Формы - никакая КАПЧА

Есть ли хороший метод безопасности формы, которая делает not включить КАПЧУ? КАПЧА Является настолько раздражающей, но мне нужна безопасность, потому что я получаю спам формы. Моя форма является PHP.

34
задан Christopher 8 April 2010 в 20:49
поделиться

7 ответов

Попробуйте akismet . Это отлично подходит для отметки спама. API прост в использовании и полностью прозрачен для ваших пользователей.

16
ответ дан 27 November 2019 в 16:33
поделиться

Этот валидатор симпатичный и быстрый!

CAT BOX

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

Я понимаю, что это сработает только в X% случаев, но добавление дополнительных параметров в список поможет уменьшить количество спама.

12
ответ дан 27 November 2019 в 16:33
поделиться

Я уже работал нечто подобное.

  1. Когда вы открываете форму, сгенерируйте одну строку md5 () и поместите ее в сеанс (например, $ _SESSION ['captha'])
  2. Ваша форма может иметь одно скрытое поле, и когда вы откроете эту форму, запишите эти данные из $ _SESSION ['captha'] в это скрытое поле
  3. Когда вы получаете этот почтовый запрос, сравните значение в сеансе и значение, которое поставляется с этим скрытым полем. Если это то же самое, все в порядке, и наоборот. Конечно, после обработки этого запроса просто удалите переменную $ _SESSION ['captha'].

Эта работа для меня.

2
ответ дан 27 November 2019 в 16:33
поделиться

Вот что я нашел очень эффективным (и очень простым):

  1. Поместите скрытое поле в вашу форму. Дайте ему имя, например, «телефон» или что-нибудь подобное / распространенное, и введите значение нежелательной почты по умолчанию.

  2. Добавьте в форму еще одно обычное поле ввода текста, но скройте его с помощью CSS. Сделайте это пустым. Опять же, дайте ему "настоящее" звучащее имя (first_name, phone_number, что угодно).

  3. После публикации формы убедитесь, что скрытое поле по-прежнему имеет значение по умолчанию, а поле, которое вы скрыли с помощью CSS, все еще пусто.

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

ETA: В ответ на некоторые комментарии - действительно ли это «безопасная» система? нет, конечно не так. Это было бы банально сломано любым, кто хотел бы настроить таргетинг на ваш сайт. Тем не менее, он по-прежнему очень эффективен против ботов, рассылающих спам в автоматических формах, которые увидят большинство "малоценных" сайтов.

Если вы хотите остановить решительного атакующего, вам понадобится что-то более агрессивное. Другой плакат упомянул Akismet, что является хорошим вариантом. Re-Captcha будет другим. Однако остановить решительных, целевых спамеров сложно. Даже Yahoo и Google испытывают трудности с этим.

40
ответ дан 27 November 2019 в 16:33
поделиться

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

Вот пара плагинов:

http://www.codegravity.com/projects/mathguard

http://sw-guide.de/wordpress/plugins/math-comment-spam-protection/

0
ответ дан 27 November 2019 в 16:33
поделиться

Если все, что вы делаете, это избегаете спам-ботов (автоматические программы, которые ищут теги

, заполните все < input> fields, затем отправьте форму), тогда простое решение - сделать, как сказал Паоло: использовать JavaScript для добавления скрытого поля. Недостаток для людей, которые отключают JavaScript.

Не стесняйтесь использовать это:

<form method="post" action="contact.php" id="commentForm">
  <label for="name">Name</label>
  <input type="text" name="name" id="name" maxlength="64" /><br />

  <label for="email">Email</label>
  <input type="text" name="email" id="email" maxlength="320" /><br />

  <label for="message">Message</label>
  <textarea name="message" rows="10" cols="40" id="Message"></textarea><br />

  <label for="human">40 + 2 =</label>
  <input type="text" name="human" id="human" size="10" maxlength="3" /><br />

  <p align="center">
  <input type="submit" name="submit" value="Send" class="submit-button" />
  </p>
</form>

Затем поместите следующий файл как «contact.php» в тот же каталог:

<?php
require_once 'lib/swift_required.php';

// Reason for not contacting.
//
$reason = 'default';

error_reporting( 0 );
ini_set( 'display_errors', 0 );

function not_contacted() {
  global $reason;

  header( 'Location: error.html' );
}

function wms_error_handler($errno, $errstr, $errfile, $errline) {
  not_contacted();
  return true;
}

function wms_shutdown() {
  if( is_null( $e = error_get_last() ) === false ) {
    not_contacted();
  }
}

set_error_handler( "wms_error_handler" );
register_shutdown_function( 'wms_shutdown' );

$name = trim( $_POST["name"] );
$email = trim( $_POST["email"] );
$message = trim( $_POST["message"] );
$human = trim( $_POST["human"] );
$subject = 'FormSpam';
$contacted = false;

if( is_null( $name ) || empty( $name ) ) {
  $reason = 'name';
  $human = false;
}
else if( is_null( $email ) || empty( $email ) ) {
  $reason = 'email';
  $human = false;
}
else if( is_null( $message ) || empty( $message ) ) {
  $reason = 'message';
  $human = false;
}
else if( is_null( $human ) || empty( $human ) || $human !== '42' ) {
  $reason = 'computer';
  $human = false;
}

if( $human === '42' ) {
  $subject = 'YourCustomSubject - '.$name;

  $transport = Swift_SmtpTransport::newInstance( 'localhost', 25 );
  $mailer = Swift_Mailer::newInstance( $transport );

  $message = stripslashes( $message );

  $message = Swift_Message::newInstance()
    ->setSubject( $subject )
    ->setFrom( array( $email => $name ) )
    ->setTo( array( 'YourEmailAddress' => 'Your Name' ) )
    ->setPriority( 1 )
    ->setBody( $message )
  ;

  if( $mailer->send( $message ) ) {
    header( 'Location: contacted.html' );
    $contacted = true;
  }
}

if( $contacted === false ) {
  not_contacted();
}
?>

Должен предотвратить 99% спама.

Я не добавлял константы, но уверен, что вы поймете, где изменить сценарий. Я удалил часть, в которой перенаправляется на разные страницы в зависимости от того, что было (или не было) введено пользователем (например, отсутствовало полное имя, адрес электронной почты, сообщение и т. Д.). Если вам нужна полная версия скрипта, дайте мне знать, и я исправлю код, чтобы он был удобнее для новых разработчиков.

Обратите внимание на зависимость Swift Mailer .

1
ответ дан 27 November 2019 в 16:33
поделиться

Зависит от типа спама форм, общие боты, сделанные для спама любой формы, которую он находит, могут быть легко пресечены гораздо менее препятствующими мерами (например, "как называется этот сайт?"), но если кто-то сделал бота, нацеленного конкретно на ваш сайт, вам понадобятся капчи или что-то столь же раздражающее.

0
ответ дан 27 November 2019 в 16:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: