PHP Микрофреймворк HLEB

Скачать (90 KB)Скачать c GitHub
Предназначение Установка Настройка Структура проекта Маршрутизация Типы маршрутов Группы маршрутов Защита маршрутов Конструктор страниц Контроллеры Модели Получение данных Базы данных Дополнительно

Защита маршрутов

В микрофреймворке HLEB реализована защита маршрутов от атак типа CSRF (Сross Site Request Forgery), но применять её можно опционально. Сделано это для максимальной гибкости разработки, поэтому необходимо вручную назначить защиту маршрутам, которые в этом нуждаются. Суть защиты состоит в том, что запрос, попадающий на защищённый маршрут, должен иметь параметр GET или POST с уникальным проверочным ключом, в противном случает запрос будет отклонён. Например, нужно передать данные из html-формы методом POST. Запрос этот должен быть направлен на маршрут с установленной защитой. Чтобы отправить с запросом уникальный ключ, необходимо в форме разместить специальную функцию csrf_field().
<form method="POST" name="protected" action="/target/" > /* Данные формы */ <? csrf_field(); ?> // Добавит строку <input type="hidden" name="_token" value="KEY"> , где KEY это сгенерированный ключ. </form>
Защита маршрута c адресом "/target/".
Route::type('post')->protect()->get('/target/', 'Этот текст защищён от CSRF');
В случае, если нужно защитить Ajax-запросы, к каждому из них добавляется параметр "_token" со значением уникального ключа. Естественно, эти запросы должны обрабатываться защищёнными маршрутами. Получить уникальный ключ можно выполнив PHP-функцию csrf_token(), отобразить его в html-коде, затем найти полученный результат на странице и добавить к запросу при помощи JavaScript. Например, вывод ключа в мета-теги страницы:
<meta name="csrf-token" content="<?= csrf_token(); ?>" >
Ещё один встроенный способ - автогенерация защищённой ссылки с параметром "_token". Функция getProtectUrl() добавляет к переданному ей аргументу (URL-адресy) необходимый GET-параметр. По этой ссылке текущий пользователь может переходить на любую защищённую страницу.

Методы getProtect(), endProtect() и protect()

Групповая защита выбранных маршрутов реализуется расстановкой начального метода getProtect() и завершающего endProtect().
Route::getProtect(); // Начало защиты Route::get( ... ); Route::get( ... ); Route::get( ... ); Route::endProtect(); // Завершение защиты
Метод protect() устанавливает защиту к отдельно взятому маршруту или группе, обозначенной применением getGroup().

Исключение метода из защищённых

Если передать методу protect() аргумент "None", то он исключает маршрут или группу из защищённых.
Route::getProtect(); Route::get( ... ); // Защищён Route::protect('None')->get( ... ); // Не защищён Route::get( ... ); // Защищён Route::endProtect();


Предназначение Установка Настройка Структура проекта Маршрутизация Типы маршрутов Группы маршрутов Защита маршрутов Конструктор страниц Контроллеры Модели Получение данных Базы данных Дополнительно


HLEB - PHP Микрофреймворк Свободная лицензия. Без гарантий. © fomiash 2019