Подтвердить что ты не робот

Хорошая форма безопасности - нет CAPTCHA

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

4b9b3361

Ответ 1

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

Ответ 2

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

  • Поместите скрытое поле в свою форму. Дайте ему имя "телефон" или что-то подобное/общее и введите значение нежелательной почты по умолчанию.

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

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

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

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

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

Ответ 3

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

CAT BOX

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

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

Ответ 4

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

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

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

Ответ 5

Если вы все делаете, избегайте спам-ботов (автоматические программы, которые ищут теги <form>, заполняют все поля <input>, затем отправьте форму), тогда простое решение должно сделать, как сказал Паоло: используйте 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% спама.

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

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

Ответ 6

Да, я изобрел и разработал метод много лет назад под названием nocaptcha.

Я тестировал, используя его на своих сайтах в течение года, а затем заметил, что Google также использует его.

Я выпустил его для Joomla (см. http://shop.ekerner.com/index.php/shop/joomla-nocaptcha-detail) и поскольку он был скопирован многими платформами (см. https://www.google.com.au/search?q=nocaptcha).

Я полагаю, что размещенная версия git с помощью вышеуказанной ссылки может быть развернута на любом сайте, и если вы не можете найти версию для своего сайта, то, возможно, попросите мою команду разработчиков создать собственное решение (см. http://www.ekerner.com/).

Ответ 8

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

Ответ 9

Если сокращение спама является непосредственной потребностью, установка формы в iframe была эффективной для меня.

<iframe src="contactform.php" scrolling="no" height="*"  width="*"></iframe>

Установите высоту и ширину рамки немного больше, чем ширина и высота формы. Используйте CSS, чтобы сделать рамку border 0, чтобы пользователи не заметили, что они смотрят на форму внутри рамки.