DSite CMS
DSite CMS
создано Media Programming Group
Последняя статья: Как добавить заголовок новости в Title

Поиск: 
Главная            Статьи            Форум            Новости            Описание
Обучающие ролики
Примеры сайтов на CMS DSite
Цены
Вебстудиям
Заявка на DSite
FAQ
Ссылки
Контакты
Скачать

Новости:
05.05.11 :: Обновление 4.91 (релиз)

21.04.11 :: Обновление 4.87

07.04.11 :: Обновление 4.83

04.02.11 :: Обновление от 01.02

25.06.10 :: Поиск по содержимому страниц


Логин:
Пароль:

Забыли пароль? Восстановить

Также Вы можете пройти регистрацию

28.05.2007 :: Защита форм от спама

В настоящее время проблема спама приобрела глобальный характер. Это касается как почты, так и, к сожалению, форм отправки даных на веб-сайтах.

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

В системе DSite существует два способа обработки форм: ручной и полу-автоматический (формы, созданные в визуальном редакторе).

В любом случае работа ведется с двумя блоками: блоком заголовком, который должен находится в самом начале шаблона (до вывода любой информации), и блок обработки формы. В некоторых случаях, это может быть и один блок.

Автоматический антиспам

Чтобы автоматически защитить форму от спама, не заставляя пользователя вводить дополнительные контрольные тексты, необходимо в заголовочном блоке инициализировать сессию:

<?
$session_array = array(17,6); // здесь перечислены секции, которые используются при отображении и обработке форм сайта
if ( in_array(GetSectionID(),$session_array ))
  {
  session_start();
  }
?>

Можно, конечно, заводить сессию всегда (на уровне шаблона), но это нерационально, тем более что код несложный.

Далее, в обработчике форм, простая проверка:

....
if( (!empty($_SESSION['_antispam']))  &&  ($_POST['_antispam'] === $_SESSION['_antispam'])  )
{
... обработка формы..
}
....

Таким образом мы убеждаемся что это не робот.

Перед выводом формы делаем так:

...

// генерация уникального кода
if (!isset($_SESSION['_antispam'])) $_SESSION['_antispam'] = md5(time()+356);
// добавление параметра формы
output_add_rewrite_var('_antispam', $_SESSION['_antispam']);
...
...вывод формы...

Для форм, формируемых визуальным редактором, проверять нужно несколько иначе, так как все данные формы, перекладываются в специальный массив:

<?
if (6==GetSectionID()) // проверка секции
{
  //
// подключаем обработчик форм,
// формируемых визуальным редактором

  require_once('inc/fckform_handlers.inc');
// первый параметр определяет
// переменную из preferences, куда отсылать форму
  $hff = new handle_fckeditor_form('feedbackto','Необходимо заполнить поле');
  $hff->print_js(); // вывод скрипта-обработчика
  // 
  if ($_POST['form_titles']) 
  { 
  // получаем контейнеры из формы:
  $containers = $hff->RetrieveContainers();
  $arrResult = array();
  // различная обработка контейнеров...
  if ($containers)
   {
   foreach ($containers as $title => $value)
     {
     $fe = new coFormElement($value->type, false, true);
     $fe->import($value);
     $db = new dcSQL();
    $db->import($value);
    $arrSQL[$title] = $db->export();
    $arrResult[$title] = $fe->gethtml();
    }//.
  //..обработка завершена
  if ( empty($_SESSION['_antispam']) || ($arrResult['_antispam'] != $_SESSION['_antispam']))
die('Вы - робот ;-) ');
else
{
// отсыл формы, отправка данных контейнеров в БД итп...
$form_submit_success_url = '/index.php?id=7'; // удачная отсылка
  if ($hff->check()) // проверка и отсылка feedback
     {
    RedirectMe($form_submit_success_url); // субмит удался, переходим на страницу,
// где говорится "спасибо"
    }  
}//..test passed
  }//..$containers
 }//..[form_titles]
}//..if
?>

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

Антиспам Тест Тьюринга

В настоящее время Тест Тьюринга стал частью системы DSite (начиная с версии 4.43b).
Для того чтобы его использовать необходимо добавить в форму визуальный элемент, например, таким образом. Сначала создаем класс в заголовочном блоке:

<? // заголовочный блок
switch (GetSectionID())
{
case 21: // секция, отображающая или получающая результаты формы
// turing init
require_once 'inc/turing.php'; // включаем модуль теста тьюринга
// подробности в техничекой документации
global $Turing;
$Turing = new TuringTest('turingword'); // создаем класс TuringTest
break;
}//switch
?>

В форме добавляем элемент:

Впишите текст из изображения <img src="/index.php?usepages=1&id=24" > сюда:
<input type="text" name="turingword">

Соответсвенно страница, которая формирует картинку (id=24) должна выглядеть примерно так:

<? 
// отображение картинки Turing
require_once 'inc/turing.php';
// параметры конструктора: id сессии, картинка-фон, путь к шрифту TTF
$Turing = new TuringTest('turingword','images/bgturing.jpg','images/a.ttf');
$Turing->color = '303030'; //цвет шрифта
$Turing->fontSize = 20; // размер шрифта
$Turing->Init();
$Turing->Display();
?>

 Проверку можно выполнить так:

if ( isset($Turing)) && ($Turing->Init(true)) && ($Turing->Check($_POST['turingword']) )
{
... обработка формы...
}

 

 



Статьи:

1  2  » 


FAQ  Поиск на форуме
Новое сообщение
Copyright © 2017 Webmedia.ru - создание сайтов & Media Programming Group