Защита от CSRF-атак
Подробнее об атаке: Википедия, Хабрахабр
Функции защиты от атак встроены в QS начиная с версии 5.3
Как защищаться от CSRF (минимум)
При работе с формой:
1. заменить вызовы FormOpen на csrfFormOpen – эта конструкция добавит csrf-токен в форму
2. Перед обработкой данных с формы сделать следующую конструкцию:
<?php
if(($csrfError = $this->csrfCheckStandart()) === TRUE) {
// здесь обрабатываем запрос с формы - проверку мы прошли
} else {
$error = $csrfError;
}
?>
При работе с ссылками
1. заменить генерацию ссылок функцией Href на csrfHref – эта конструкция добавит csrf-токен в ссылку
2. Шаг идентичен работе с формой – т.е. добавляем проверку в обработку
Встроенная защита
Защита уже встроена в следующие части системы:
- OneButtonAction (генерация однокнопочных форм)
- actions/adminviewtable, adminedittable (стандартные формы просмотра и редактирования таблиц)
Продвинутый вариант
Есть валидация токенов по времени
<?php
if(($csrfError = $this->csrfCheckStandart(60)) === TRUE) {
// токен будет валидным в течении 60 секунд, т.е. форма должна быть отправлена за это время, иначе будет ошибка
} else {
$error = $csrfError;
}
?>
Функции, касающиеся CSRF, находятся в конце файла classes/extension.php
Запрет на кроссайтовые POST-запросы из браузера
По умолчанию включено блокирование POST-запросов с других сайтов (файл wakka.php)
Разблокировать (при проблемах) можно установлением конфиг-параметра $wakkaConfig["csrf_enable_standart_crossite_post"] = 1