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

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

Related of "Хорошая форма безопасности – нет CAPTCHA"

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

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

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

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

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

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

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

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

Этот валидатор хорош и быстр!

CAT BOX http://img.ruphp.com/forms/157ln4.gif

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

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

Я уже что-то сработал.

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

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

Если вы все делаете, избегайте спам-ботов (автоматические программы, которые ищут теги <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% спама.

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

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

Да, я изобрел и разработал метод много лет назад под названием 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/ ).

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

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

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

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

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

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

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

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