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



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

Определимся со списком наших стоп-слов, и запишем их в переменную без пробелов через запятую:

$stopwords="секс,оргазм,минет,анал,интим,проститут,viagr,sex,intim";

Этот список можно продолжать до бесконечности.

Теперь напишем предупреждение, которое будет выводиться пользователю, когда мы отклоним его данные, в связи с наличием в них стоп-слов, нежелательных к публикации:

$anti_spam="В Ваших данных содержится стоп-слово, наличие которого препятствует публикации на нашем сайте!";

Теперь из наших стоп-слов создадим массив, разбивая список по запятым:

$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="секс,оргазм,минет,анал,интим,проститут,viagr,sex,intim";
$anti_spam="В Ваших данных содержится стоп-слово, наличие которого препятствует публикации на нашем сайте!";
$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);
}
 
Orphus Обнаружили ошибку в тексте? Выделите её и нажмите Ctrl+Enter.