Защита от 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”