Случайный образом нашел в интернете данную статью, думаю все видели, что люди делают с капчами ради того, чтобы спам-бот не смог его расшифровать, но иногда и людям это сложно сделать. Один добрый человек придумал данную статью и собвтенно способ, кто именно я не знаю, ссылку на статью я оставлю.
Возможно стоит её прикрутить к modx? Стоит ли оно этого?
Теперь сама статья.
Спам – слово, вызывающее лютую ненависть и уже привычное для обывателя. Что поделаешь, есть такие люди, которые его рассылают и видимо неплохо получают за это.
Наша цель оградиться от спама с минимальными жертвами и затратами. Есть, конечно, очень легкий способ, который называется
CAPTCHA, тест
Тьюринга, но в последнее время количество постов ненависти на тему капчи просто зашкаливает. И правильно, на самых примитивных сайтах, что бы написать комментарий приходится ломать голову и глаза, а это явно не способствует повышению посещаемости. Как результат снижение процента конверсий из-за капчи (
RU/
EN). А значит нам нужен другой способ

.
Я для себя сделал все просто. Для защиты от ботов в код формы вставил простейший
js код, а для защиты от «ручного» спама подключил
jabber.
Наглядно
Защита от ботов делается очень просто. При загрузке страницы с формой генерируется некий хеш код для пользователя и превращается в
CharCode для
js. Например, вот так:
$_SESSION['userhash'] = md5( time() . $_SERVER['REMOTE_ADDR'] . 'Ня!' );
$user['hash'] = Array();
for ( $i = 0; $i < strlen( $_SESSION['userhash'] ); $i++ )
$user['hash'][] = ord( $_SESSION['userhash'][$i] );
$user['hash'] = implode( ',', $user['hash'] );
В форме отправки комментария есть скрытое поле:
<input type="hidden" name="userhash" value="" id="userhash">
которое заполняется, например, при установке курсора в поле с комментарием.
<textarea … onfocus="o('userhash').value = String.fromCharCode({#[user]['hash']});">
или при сабмите формы или вообще не заполняется, а хешкод добавляется в куки на
window.onload где-то в куче прочего
обсфуцированного js кода.
На сервере даже без каких-либо фильтров:
if ( $_SESSION['userhash'] != $_POST['userhash'] ) return false;
Теперь так просто комментарий не отправишь, а что бы отправить придется помучаться, потратить часок на написание
парсеров, хотя мне хватит минуты-двух, что бы сменить защиту

Понятно, что это делать никто не будет, но если мой блог станет вдруг ацки популярен, во что я не верю

, то спам будут слать люди, человекоимитаторы или продвинутые
js боты. Вайп они таким способом не устроят, а вот намусорить могут. Но и тут уже готово решение
Сообщения о новых комментариях приходит в
jabber и не просто сообщение, а еще и со ссылкой на прямое удаление этого комментария. Выглядит это так:
Нажимая на ссылку удалить, я полностью удаляю спамерский комментарий без ввода логина и пароля. Происходит это по уникальному для каждого комментария хешкоду. Максимум это занимает
2-3 секунды с момента написания комментария.
На сервере отправка сообщения реализуется очень просто:
//load XMPP
require_once 'application/dev/XMPP.php';
$conn = new XMPPHP_XMPP( 'jabber.ru', 5222, 'dargin.bot', '*******', 'xmpphp', 'jabber.ru', $printlog=false, $loglevel=XMPPHP_Log::LEVEL_INFO );
try {
$conn->connect();
$conn->processUntil('session_start');
$conn->presence();
$conn->message( '[email protected]', $new_comment_text );
$conn->disconnect();
} catch( XMPPHP_Exception $e ) {}
Скачать библиотеку
xmpphp можно
здесь. Протокол
jabber это не
icq, вам не нужно качать новые библиотеки каждые 2 недели и он очень стабильно работает. Я думаю у каждого уважающего себя
it’шнека должен быть
jabber аккаунт.
Пробуйте
Если в этой записи блога вы в поле контактов укажете ваш реальный
jabber адрес, то так же получите сообщение, как и я, сможете оценить все удобство этой системы и скорость работы, а так же удалить свой комментарий.