
Я думаю все сталкиваются с проблемой, связанной с публикацией на ваших сайтах нежелательных данных. Будь то сообщения в форумах, в гостевых книгах, комментарии в блогах, галереях. Сегодня я вам покажу несложный вариант защиты, используя стоп-слова.
Стоп-слова - это заранее известный набор слов, которые добавляются ботами на сайты: порно, виагра, секс и так далее и тому подобное.
Я буду рассматривать вариант, когда уже есть рабочий скрипт содержащий, как минимум форму для добавления данных, и код, который принимает эти данные, обрабатывает и складывает в БД или записывает в файл для последующего вывода на страницы сайта.
Форму мы трогать не будем, т.к. она нам не нужна в нашем примере, поэтому перейдем к месту, где происходит обработка принятых данных, перед этим кодом начинаем писать наш механизм.
Определимся со списком наших стоп-слов, и запишем их в переменую без пробелов через запятую:
$stopwords = "секс,порно,оргазм,porn,минет,анал,интим,проститут,viagr,sex,intim";
Этот список можно продолжать до бесконечности.
Теперь напишем предупреждение, которое будет выводиться пользователю, когда мы отклоним его данные, в связи с наличием в них СТОП-СЛОВ, нежелательных к публикации:
$anti_spam = "В Ваших данных содержится СТОП-СЛОВО,<br /> наличие которого препятствует публикации на нашем сайте!";
Теперь из наших стоп-слов создадим массив, разбивая список по запятым:
$arr_stopwords = explode(",", $stopwords);
К примеру в нашей форме добавления данных есть поле
text, содержащее основную часть и есть поле
title, содержащее заголовок.
И теперь нам осталось в цикле проверять эти переменные на наличие стоп-слов, и если найдем их, то прерываем дальнейшее логическое исполнение скрипта и выводим ругательное сообщение:
foreach($arr_stopwords as $value)
{
if (preg_match ("/$value/i", $_POST['text '])) die($anti_spam);
if (preg_match ("/$value/i", $_POST['title'])) die($anti_spam);
}
Вот собственно и весь механизм.
Полный листинг:
$stopwords = "секс,порно,оргазм,porn,минет,анал,интим,проститут,viagr,sex,intim";
$anti_spam = "В Ваших данных содержится СТОП-СЛОВО,<br />
наличие которого препятствует публикации на нашем сайте!";
$arr_stopwords = explode(",", $stopwords);
foreach($arr_stopwords as $value)
{
if (preg_match ("/$value/i", $_POST['text '])) die($anti_spam);
if (preg_match ("/$value/i", $_POST['title'])) die($anti_spam);
}