16
Мар

Защита форм: стоп-слова

Я думаю все сталкиваются с проблемой, связанной с публикацией на ваших сайтах нежелательных данных. Будь то сообщения в форумах, в гостевых книгах, комментарии в блогах, галереях. Сегодня я вам покажу несложный вариант защиты, используя стоп-слова.

Стоп-слова - это заранее известный набор слов, которые добавляются ботами на сайты: порно, виагра, секс и так далее и тому подобное.
Я буду рассматривать вариант, когда уже есть рабочий скрипт содержащий, как минимум форму для добавления данных, и код, который принимает эти данные, обрабатывает и складывает в БД или записывает в файл для последующего вывода на страницы сайта.

Форму мы трогать не будем, т.к. она нам не нужна в нашем примере, поэтому перейдем к месту, где происходит обработка принятых данных, перед этим кодом начинаем писать наш механизм.

Определимся со списком наших стоп-слов, и запишем их в переменую без пробелов через запятую:
$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); 
} 

 

Комментарии

Rss-лента комментариев к этому посту
 
Для комфортного доступа к этому сайту, в вашем браузере должен быть включен JavaScript