Есть ли хороший метод защиты формы, который not
связан с CAPTCHA? CAPTCHA так раздражает, но мне нужна безопасность, потому что я получаю спам. Моя форма – PHP.
Попробуйте акисмет . Это замечательно, когда вы отмечаете спам. API прост в использовании и полностью прозрачен для ваших пользователей.
Вот что я нашел очень эффективным (и мертвым просто):
Поместите скрытое поле в вашу форму. Дайте ему имя «телефон» или что-то подобное / общее и введите значение нежелательной почты по умолчанию.
Поместите другое регулярное поле ввода текста в вашу форму, но спрячьте его с помощью CSS. Сделайте это пустым. Опять же, дайте ему «настоящее» звучащее имя (first_name, phone_number, что угодно).
Когда форма отправлена, убедитесь, что скрытое поле по-прежнему имеет значение по умолчанию, а поле, которое вы скрывали с помощью CSS, по-прежнему пуст.
Вы в основном пользуетесь тем фактом, что большинство спам-ботов просто заполняют каждое поле в форме, чтобы избежать сбоев каких-либо обязательных проверок проверки полей. Некоторые могут быть достаточно умны, чтобы игнорировать скрытые поля, но я никогда не видел того, что было достаточно умным, чтобы игнорировать поля, скрытые с помощью CSS.
ETA: Чтобы рассмотреть некоторые комментарии – действительно ли это «безопасная» система? нет, конечно нет. Это было бы тривиально нарушено любым, кто хотел бы специально настроить ваш сайт. Тем не менее, он по-прежнему чрезвычайно эффективен против автоматизированных форм спам-ботов, которые будут видеть большинство сайтов с низкой стоимостью.
Если вы хотите остановить определенного атакующего, вам понадобится нечто более инвазивное. Другой плакат упоминал Akismet, что является хорошим вариантом. Re-Captcha был бы другим. Остановить определенные, целевые спамеры трудно. Даже Yahoo и Google с трудом справляются с этим.
CAT BOX http://img.ruphp.com/forms/157ln4.gif
Очевидно, вам нужно отобразить одно из многих возможных изображений животных, и список также должен быть рандомизирован.
Я понимаю, что это будет работать только в Х% времени, но добавление дополнительных параметров в список поможет уменьшить спам.
Я уже что-то сработал.
Эта работа для меня.
Если вы все делаете, избегайте спам-ботов (автоматические программы, которые ищут теги <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, чтобы пользователи не заметили, что они смотрят на форму внутри рамки.