Учебники

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

Безопасность — еще одна важная функция при создании веб-приложений. Это гарантирует пользователям сайта, что их данные защищены. CakePHP предоставляет некоторые инструменты для защиты вашего приложения.

Шифрование и дешифрование

Библиотека безопасности в CakePHP предоставляет методы, с помощью которых мы можем шифровать и дешифровать данные. Ниже приведены два метода, которые используются для той же цели.

static Cake\Utility\Security::encrypt($text, $key, $hmacSalt = null)
static Cake\Utility\Security::decrypt($cipher, $key, $hmacSalt = null)

Метод шифрования примет текст и ключ в качестве аргумента для шифрования данных, а возвращаемое значение будет зашифрованным значением с контрольной суммой HMAC.

Для хеширования данных используется метод hash (). Ниже приведен синтаксис метода hash ().

Синтаксис

static Cake\Utility\Security::hash($string, $type = NULL, $salt = false)

CSRF

CSRF означает « Подделка межсайтовых запросов» . Включив компонент CSRF, вы получаете защиту от атак. CSRF — распространенная уязвимость в веб-приложениях. Он позволяет злоумышленнику захватывать и воспроизводить предыдущий запрос, а иногда и отправлять запросы данных, используя теги изображений или ресурсы в других доменах. CSRF можно включить, просто добавив CsrfComponent в массив компонентов, как показано ниже.

public function initialize(){
   parent::initialize();
   $this->loadComponent('Csrf');
}

CsrfComponent легко интегрируется с FormHelper . Каждый раз, когда вы создаете форму с помощью FormHelper, она вставляет скрытое поле, содержащее маркер CSRF.

Хотя это не рекомендуется, вы можете отключить CsrfComponent для определенных запросов. Это можно сделать с помощью диспетчера событий контроллера во время метода beforeFilter () .

public function beforeFilter(Event $event){
   $this->eventManager()->off($this->Csrf);
}

Компонент безопасности

Компонент безопасности обеспечивает более жесткую защиту вашего приложения. Он предоставляет методы для различных задач, таких как —

  • Ограничение того, какие методы HTTP принимает ваше приложение. Перед выполнением побочных эффектов всегда следует проверять используемый метод HTTP. Вы должны проверить метод HTTP или использовать Cake \ Network \ Request :: allowMethod (), чтобы убедиться, что используется правильный метод HTTP.

  • Защита от подделки форм — по умолчанию SecurityComponent предотвращает несанкционированное вмешательство пользователей в формы. SecurityComponent предотвратит следующие вещи —

    • Неизвестные поля не могут быть добавлены в форму.

    • Поля не могут быть удалены из формы.

    • Значения в скрытых входах не могут быть изменены.

  • Требование использования SSL — все действия требуют SSL-защиты.

  • Ограничение связи между контроллерами. Мы можем ограничить, какой контроллер может отправлять запросы этому контроллеру. Мы также можем ограничить, какие действия могут посылать запрос к действию этого контроллера.

Ограничение того, какие методы HTTP принимает ваше приложение. Перед выполнением побочных эффектов всегда следует проверять используемый метод HTTP. Вы должны проверить метод HTTP или использовать Cake \ Network \ Request :: allowMethod (), чтобы убедиться, что используется правильный метод HTTP.

Защита от подделки форм — по умолчанию SecurityComponent предотвращает несанкционированное вмешательство пользователей в формы. SecurityComponent предотвратит следующие вещи —

Неизвестные поля не могут быть добавлены в форму.

Поля не могут быть удалены из формы.

Значения в скрытых входах не могут быть изменены.

Требование использования SSL — все действия требуют SSL-защиты.

Ограничение связи между контроллерами. Мы можем ограничить, какой контроллер может отправлять запросы этому контроллеру. Мы также можем ограничить, какие действия могут посылать запрос к действию этого контроллера.

пример

Внесите изменения в файл config / rout.php, как показано в следующей программе.

конфиг / routes.php

<?php
   use Cake\Core\Plugin;
   use Cake\Routing\RouteBuilder;
   use Cake\Routing\Router;

   Router::defaultRouteClass('DashedRoute');
   Router::scope('/', function (RouteBuilder $routes) {
      $routes->connect('login',['controller'=>'Logins','action'=>'index']);
      $routes->fallbacks('DashedRoute'); 
   });
   Plugin::routes();

Создайте файл LoginsController.php в src / Controller / LoginsController.php . Скопируйте следующий код в файл контроллера.

SRC / Controller / LoginsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;

   class LoginsController extends AppController{
      public function initialize(){
         parent::initialize();
         $this->loadComponent('Security');
      }
      public function index(){
      }
   }
?>

Создайте каталог Logins в src / Template и в этом каталоге создайте файл View с именем index.ctp . Скопируйте следующий код в этот файл.

SRC / Template / логины / index.ctp

<?php
   echo $this->Form->create("Logins",array('url'=>'/login'));
   echo $this->Form->input('username');
   echo $this->Form->input('password');
   echo $this->Form->button('Submit');
   echo $this->Form->end();
?>

Выполните приведенный выше пример, посетив следующий URL — http: // localhost: 85 / CakePHP / login

Выход

После выполнения вы получите следующий вывод.