Хак Вопрос-ответ с картинкой, правильная борьба со спамом в DLE
В свете выхода XRumer 7.7.35 многие сайты на DLE заполнились спамом. Тексткапча, т.е. система вопрос-ответ уже не так эффективна, по причине того, что Botmaster(разработчик Xrumer) провел масштабную акцию по обучению хрумера новым тексткапчам. Огромное количество вопросов-ответов пробиваются хрумером без труда.
Botmaster:
Как многие уже знают, в сентябре-октябре у нас прошёл масштабный конкурс по коллективному обучению XRumer-а новым тексткапчам. И коллективный разум дал свои плоды: результаты превзошли все наши ожидания, программа стала знать на 70.000 текстовых защит больше. А ведь именно текстовыми капчами стали спасаться большинство админов форумов
Хрумер распознает кучу разных видов капч, и далее усложнять капчи = терять посетителей.
Решение как всегда оказалось на поверхности, небольшой хак, и на сайтах которые мониторятся с 13 мая 2012 года, и на которых отключена стандартная капча на данный момент не зарегистрировалось ни одного бота.
Что на данный момент умеет распознавать хрумер? Текст на картинке, с разными зашумлениями и искажениями.
Изображения на картинке он пока распознавать не умеет
Внимание вопрос:
Что нарисованно на этой картинке?
Любой человек без труда ответит что это ... Телефон
Что ответит на этот вопрос хрумер, или вообще любой бот? Да ничего, ведь он научен распознавать только текст, а текста на картинке нет.
Стало быть задача, давать посетителям при регистрации любую простую картинку, чтобы они отвечали что на ней нарисованно.
Вопрос всегда будет один и тот же -
Что нарисованно на картинке?
Ответы и картинки разные.
В контексте DLE, для решения этой задачи очень подходит стандартная система вопрос-ответ, единственная проблема в том, что когда печатаешь вопрос, двиг вырезает все теги, от этого и будем его отучать. Картинки, надо загружать на сервер самому, через FTP, дабы не громоздить лишний ненужный код.
1. Откроем файл
engine/ajax/addcomments.php
$qs['question'] = htmlspecialchars( stripslashes( $qs['question'] ), ENT_QUOTES );
заменяем на
2. Откроем файл
engine/modules/register.php
заменяем на
$question = $db->safesql( strip_tags($_POST['question'], '<img>') );
$row['question'] = htmlspecialchars( stripslashes($row['question']), ENT_QUOTES );
$entries .= "<tr>
<td align=\"center\" style=\"width:100px;\"><a uid=\"{$row['id']}\" class=\"editlink\" href=\"?mod=question\"><img style=\"vertical-align: middle;border:none;\" alt=\"{$lang['word_ledit']}\" title=\"{$lang['word_ledit']}\" src=\"engine/skins/images/notepad.png\" /></a> <a uid=\"{$row['id']}\" class=\"dellink\" href=\"?mod=question\"><img style=\"vertical-align: middle;border:none;\" alt=\"{$lang['word_ldel']}\" title=\"{$lang['word_ldel']}\" src=\"engine/skins/images/delete.png\" /></a></td>
<td style=\"padding:4px;\" nowrap><div id=\"question_{$row['id']}\">{$row['question']}</div><div id=\"answer_{$row['id']}\" style=\"display:none\">{$row['answer']}</div></td>
</tr>
<tr><td background=\"engine/skins/images/mline.gif\" height=1 colspan=4></td></tr>";
$entries .= "<tr>
<td align=\"center\" style=\"width:40px;\"><a uid=\"{$row['id']}\" class=\"dellink\" href=\"?mod=question\"><img style=\"vertical-align: middle;border:none;\" alt=\"{$lang['word_ldel']}\" title=\"{$lang['word_ldel']}\" src=\"engine/skins/images/delete.png\" /></a></td>
<style>div.questionmod img {width: 40px;}</style><td style=\"padding:4px;\" nowrap><div class=\"questionmod\" id=\"question_{$row['id']}\"><b>Вопрос:</b> {$row['question']}</div></td><td align=left valign=bottom><div id=\"answer_{$row['id']}\" ><b>Ответ: </b>{$row['answer']}</div></td>
</tr>
<tr><td background=\"engine/skins/images/mline.gif\" height=1 colspan=4></td></tr>";

