Оглавление

Добавление маркера в форму

Если посмотреть на приведенный выше код формы, то в нем можно увидеть скрытый элемент ввода token, содержащий маркер сеанса (token). Это мера безопасности, направленная на предотвращение атак путем подделки межсайтовых запросов (cross-site request forgeries, CSRF), суть которых заключается в отправке формы обрабатывающему файлу приложения с постороннего сайта, не имеющего никакого отношения к сайту, с которого была загружена форма. Такую тактику спамеры часто применяют для рассылки множественных фальшивых запросов, представляющих собой потенциальную угрозу безопасности, раздражающих пользователей и явно нежелательных.

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

 
Чтобы включить маркер в приложение, добавьте в файл инициализации код, выделенный ниже желтым фоном.

 


<?php 
 
/* * Запуск сеанса */ session_start(); /* * Сгенерировать маркер защиты от CSRF, * если это яе было сделано ранее */ if ( !isset($_SESSION['token']) ) { $_SESSION['token'] = sha1(uniqid(mt_rand(), TRUE)); }
/* * Включить необходимую конфигурационную информацию */ include_once '../sys/config/db-cred.inc.php'; // Информация о БД /* * Определить константы для конфигурационной информации */ foreach ( $C as $name => $val ) { define($name, $val); } /* * Создать PDO-объект */ $dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_NAME; $dbo = new PDO($dsn, DB_USER, DB_PASS); /* * Определить для классов функцию автозагрузки */ function __autoload($class) { $filename = "../sys/class/class." . $class . ".inc.php"; if ( file_exists($filename) ) { include_once $filename; } } ?>

 

 

Предупреждение. В качестве дополнительной меры безопасности целесообразно ограничить время жизни маркера. Например, проверка того, что маркер существует не более 20 минут, поможет снизить вероятность хищения данных злоумышленниками, если пользователь оставит компьютер на некоторое время без присмотра. Для получения более подробной информации относительно маркеров и методов борьбы с CSRF посетите блог Криса Шифлетта (Chris Shiflett) и ознакомьтесь с его статьей на эту тему по такому адресу  http://shiflett.org/csrf
Комментарии принадлежат их авторам. Мы не несем ответственности за их содержание.
Отправитель Нити