Защита комментариев сайта от спама | SelkinVitaly.RU
Защита комментариев сайта от спама | SelkinVitaly.RU

Защита комментариев от спама

Рубрика: PHP

Просмотров: 3547

Добрый вечер, друзья! Хотя какой он добрый. Мало того что материал, который я должен добавить в среду, публикую сейчас (проблемы с Интернетом), так ещё удалил файл, в котором хранил эту статью (она была написана заранее, и на её написание было потрачено полдня). Ну что же, не без греха. Давайте лучше переходить к хорошему. Хоть дословно я не смог восстановить то, что было написано мною ранее, но во всяком случае попытался.

Защита комментариев от спама

Скачать защиту от спама

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

Предыдущие статьи по скрипту

История развития

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

Первоначально в качестве защиты использовались цифры, которые выводились в форме и которые посетитель должен ввести в отдельное текстовое поле. Отдако, спамеры не стояли на одном месте и придумали бота, который просматривает исходный код формы и, если там найдёт какие-то подозрительные символы, то парсит их в поле. Результат - получаем спамерский комментарий на своём сайте.

Тогда разработчики поняли, что нужно сделать так, чтобы роботы не смогли прочесть эти символы. Решение было найдено - изобразить цифры на изображении, ведь роботы не умеют читать содержимое картинки. По такому принципу я предлагаю реализовать защиту и в нашем скрипте.

Принцип реализации защиты

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

Процесс создания

Скачиваем скрипт и этой статьи и сейчас будем вносить в него изменения.

1. Создание защитного изображения.

Я уже набросал следующее изображение в Фотошопе размером 90х45:

Защита комментариев от спама

Можете использовать моё, а можете и своё создать.

2. Вносим изменения в код формы.

Сейчас код нашей формы (index.php) выглядит следующим образом:

<form name="comment_f" class="comment-form" method="post" action="submit.php">
<p>Имя:<br/><input name="name" type="text"/></p>
<p>Email:<br/><input name="email" type="text"/></p>
<p>Текст:<br/><textarea name="text" rows="5" cols="30"></textarea></p>
<p><input class="button" name="button" type="submit" value="Добавить"/></p>
</form>

Создадим новое скрытое текстовое поле, вставим изображение, и код формы преобретёт следующий вид:

<form name="comment_f" class="comment-form" method="post" action="submit.php">
<p>Имя:<br/><input name="name" type="text"/></p>
<p>Email:<br/><input name="email" type="text"/></p>
<p>Текст:<br/><textarea name="text" rows="5" cols="30"></textarea></p>
<p>Решите пример:<br/><img class="spam-img" align="middle" src="images/spam.jpg" alt="Включите изображение"/>
<input type="text" size="3" name="spam"/></p>
<p><input class="button" name="button" type="submit" value="Добавить"/></p>

3. Стилизация изображения.

Замечаем, что изображению (во 2 пункте) мы дали класс spam-img, теперь нужно рассписать данный класс в нашей таблице стилей style.css. Добавляем следующие строки:

.spam-img {
border: 1px solid #999; /*Рамка*/
margin-top:6px; /*Отступ сверху*/
}

4. Создадим новое поле в БД для результата.

Новое поле будем создавать в таблице advanced. Поле будет называть spam. Вставляем SQL-запрос:

ALTER TABLE `advanced` ADD `spam` INT( 5 ) NOT NULL;
UPDATE `advanced` SET `spam` = '24' WHERE `id` =1 LIMIT 1

24 - это результат, полученный при решении примера. Если у вас пример свой, то замените на другое значение.

5. Редактируем файл-обработчик.

Открываем submit.php. Для начала нам нужно результат, находящийся в БД, вывести, то есть сделать доступным для работы, чтобы с ним можно было работаться. Для этого прописываем:

$res=mysql_query("SELECT spam FROM ".$tbl2."",$db);
$row=mysql_fetch_array($res);

Для того чтобы защитить поле от постороннего ввода прописываем:

$spam = trim ($_POST["spam"]);
$spam = htmlspecialchars ($spam);

Теперь нужно защититься, когда пользователь оставит поля пустыми:

if (!isset($spam) or empty ($spam)) {echo "<meta http-equiv='refresh' content='3;URL=$_SERVER[HTTP_REFERER]'>";exit ("<div align='center'><div class='alert'>Вы не решили пример!</div></div>");}

Осталось проверить, правильно ли решил пример юзер:

if ($row["spam"] !== $spam) {echo "<meta http-equiv='refresh' content='3;URL=$_SERVER[HTTP_REFERER]'>";exit ("<div align='center'><div class='alert'>Вы неправильно решили пример!</div></div>");}
  • $row["spam"] - правильный результат, который находится в БД.
  • $spam - то, что ввёл пользователь.
  • !== - значёк, говорящий, что один элемент не равен другому.
  • if(условие) {что делать} - функция для проверки условия (на русском языке - "если").
  • empty - функция проверки элемента на пустоту, то есть когда переменная равна 0.
  • !isset - функция проверки элементы на несуществование (обратное - isset).

На русском языке данную строке можно воспроизвести следующим образом:

Если правильный результат (24) не соответствует значение, введённому пользователем, то выводить сообщение "Вы неправильно решили пример!".

На стрине я отметил новые строки. Также в файле, который прикладываю в архиве, я прокомментирировал каждую новую строку.

Новые строки в скрипте добавления комментариев

Файлы, которые подверглись изменению

  • index.php - главный файл, в котором выводятся комментария, и отображается форма.
  • submit.php - файл, отвечающий за обработку нового комментария.
  • style.css - таблица стилей.
  • images/ - добавилось новое изображение в папке.

На этом у меня всё. До новых встреч!

Комментарии:

Добавил: Владимир (02-Jul 2010 15:06:20)

СПАСИБО!!! Все понятно... вообщем - No comment

Добавил: Владимир Барыга (16-Apr 2010 1:23:05)

согласен !! Сделайте премодерацию!!!!

Селькин Виталий:
Постараюсь

Добавил: khabinfo (15-Feb 2010 6:24:21)

Премодерацию сделайте с админкой. Тогда скрипт будет классный.

Селькин Виталий:
Посмотрим что можно сделать


Добавление комментария:

Имя *:

Email:

Текст *:

Символы на картинке *:

RSS-подписка
RSS-подписка на статьи по основам сайтостроения RSS-подписка на полезные уроки по web-языкам
Разделы статьй
Каталог товаров
Разделы уроков
Последние статьи
Последние уроки