Подпишитесь на RSS

Пишем защиту наших форм от спама, используя список стоп-слов

This item was filled under [ Полезные функции ]

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

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

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

$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); 
}
?>

Популярность: 7%

Tagged with: [ , ]
You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Комментарии