Документация

Начало работы

Модели (models)

Шаблоны (views) и маршрутизация (routes)

Формы

SQL запросы

Сессии и безопасность

Плагины

Безопасность

Защита от SQL инъекций

Перед подстановкой значений в SQL запрос (в прямом запросе) их надо обработать специальной функцией "secure()" для экранирования одиночной кавычки. Данный метод содержется в классе "Database" и доступен в объекте "$db", находящимся в каждой модели и плагине.

Внимание! Конструктор запросов самостоятельно применяет метод "secure()" к входящим данным. Если используются Прямые запросы, то при вызове метода "secure()" не нужно обрамлять значение в одиночные кавычки, т.к. данный метод в свою очередь вызывает метод PDO :: quote().

//Данные, которые необходимо обезопасить
$param = $_GET["param"];

//Для значения "type" кавычки не нужны
$row = $this -> db -> getRow("SELECT * FROM `products` 
                              WHERE `active`='1' 
                              AND `type`=".$this -> db -> secure($param);

//Для целочисленных значений лучше применить функцию intval()
$row = $this -> db -> getRow("SELECT * FROM `table` WHERE `id`='".intval($_GET["id"])."'");

XSS при заполненни форм

Данные вводимые в поля формы (которые созданы объектом класса "Form" как в разделе Создание форм) обрабатываются функцией "htmlspecialchars()" в режиме "ENT_QUOTES". Таким образом потенциально опасные HTML символы переводятся с мнемоники (сущности).

HttpOnly cookie

Сессионные cookie, а также cookie, выставляемые административной панелью, имеют по умолчанию включенный флаг HttpOnly, что делает невозможным считать их с помощью JavaScript. Данная опция ставит дополнительный барьер для проведения XSS. Режим HttpOnly может быть отключен в файле "config/setup.php".

Безопасность административной панели

  • При двух неудачных попытках авторизации пользователю предлагается ввести captcha.
  • Восстановление пароля только после ввода captcha и подтверждения по ссылке на email.
  • Привязка сессии к браузеру и ip адресу.
  • Токены для исключения возможности CSRF при операциях в административной панели.
  • Разлогинивание пользователя по таймауту (с возможность авлологина).

URL в объекте Router

В объекте Router из url адреса удаляется одиночная кавычка, при этом GET параметры остаются в исходном виде и в случае их применения в прямых запросах необходимо вызвать метод "secure()" из объекта базы данных.

$row = $this -> db -> getRow("SELECT * FROM `products` 
                              WHERE `color`=".$this -> db -> secure($_GET['color']);

Использование CSRF токена для защиты формы

Для использование индивидуального CSRF токена для формы необходимо вызвать метод useTokenCSRF() и отобразить в форме скрытое поле с токеном. Желательно, чтобы проект при этом использовал сессию ('SessionSupport' => true в файле "config/setup.php").

$form = new Form($fields); 
$form -> useTokenCSRF();

if(!empty($_POST)) 
    $form -> getDataFromPost() -> validate();

//Внутри html тэга <form> 
<? echo $form -> displayTokenCSFR(); ?>

Предыдущий раздел

Кэширование

Следующий раздел

Отладка