class Security_Csrf (Создание токенов)
Класс Security_Csrf используется для создания, управления и валидации токенов, направленных на защиту от CSRF-атак.
/** * CSRF Security class * @package Security * @uses Utils, Store_Interface , Store_Session , Request */class Security_Csrf
{
// константа, имя параметра header, в котором передается токен
const HEADER_VAR = 'HTTP_X_CSRF_TOKEN';
// константа, имя параметра токена, передаваемого в POST-запросе
const POST_VAR = 'xscrftoken';
/** * Установить хранилище токенов, реализующее интерфейс Store_Interface * @param Store $store */static public function setStorage(Store_Interface $store)
/** * Установить конфигурационные опции (storage , lifetime , cleanupLimit) * @param array $options * @throws Exception */static public function setOptions(array $options)
/** * Создать и сохранить токен * @return string */public function createToken()
/** * Проверить валидность токена * @param string $token * @return boolean */public function isValidToken($token)
/** * Удалить токены с истекшим временем жизни */public function cleanup()
/** * Удалить токен * @param string $token */public function removeToken($token)
/** * Проверить POST-запрос на наличие токена * @param string $tokenVar - имя параметра в запросе * @return boolean */public function checkPost($tokenVar = Security_Csrf::POST_VAR)
/** * Проверить наличие токена в заголовках (HEADER) * @param string $tokenVar - имя параметра в заголовке * @return boolean */public function checkHeader($tokenVar = Security_Csrf::HEADER_VAR)
}
Простой пример проверки токена:
$csrf = new Security_Csrf();
/*
* Устанавливаем опции токена
* lifetime — время жизни 1 час
* cleanupLimit — лимит накопления токенов в хранилище, при котором начнется
* очистка устаревших токенов (текущего пользователя)
* storage — хранилище токенов, по умолчанию — сессия, оставим без изменений
*/
$csrf->setOptions(
array(
'lifetime' => 3600,
'cleanupLimit' => 300
)
);
// Проверяем наличие токена в заголовках данных POST запроса, в данном случае AJAX
if(!$csrf->checkHeader() && !$csrf->checkPost())
Response::jsonError('Error Message');
comments powered by Disqus