CakePHP - Bezpieczeństwo

Bezpieczeństwo to kolejna ważna funkcja podczas tworzenia aplikacji internetowych. Zapewnia użytkowników serwisu, że ich dane są zabezpieczone. CakePHP zapewnia narzędzia do zabezpieczania aplikacji.

Szyfrowanie i deszyfrowanie

Biblioteka bezpieczeństwa w CakePHP udostępnia metody, za pomocą których możemy szyfrować i odszyfrowywać dane. Poniżej przedstawiono dwie metody, które są używane w tym samym celu.

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

Metoda encrypt przyjmie tekst i klucz jako argument do zaszyfrowania danych, a wartością zwracaną będzie zaszyfrowana wartość z sumą kontrolną HMAC.

Aby zaszyfrować dane, hash()metoda jest używana. Poniżej znajduje się składnia metody hash ().

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

CSRF

CSRF oznacza Cross Site Request Forgery. Włączając komponent CSRF, otrzymujesz ochronę przed atakami. CSRF to powszechna luka w aplikacjach internetowych.

Umożliwia atakującemu przechwycenie i odtworzenie poprzedniego żądania, a czasami przesłanie żądań danych przy użyciu tagów obrazu lub zasobów w innych domenach. CSRF można włączyć, po prostu dodając plikCsrfComponent do tablicy komponentów, jak pokazano poniżej -

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

CsrfComponent bezproblemowo integruje się z platformą FormHelper. Za każdym razem, gdy tworzysz formularz za pomocą FormHelper, wstawi on ukryte pole zawierające token CSRF.

Chociaż nie jest to zalecane, możesz chcieć wyłączyć CsrfComponent w niektórych żądaniach. Możesz to zrobić za pomocą dyspozytora zdarzeń kontrolera w trakciebeforeFilter() metoda.

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

Komponent bezpieczeństwa

Komponent bezpieczeństwa zapewnia większe bezpieczeństwo aplikacji. Zapewnia metody do różnych zadań, takich jak -

  • Restricting which HTTP methods your application accepts- Powinieneś zawsze zweryfikować metodę HTTP, używaną przed wykonaniem efektów ubocznych. Powinieneś sprawdzić metodę HTTP lub użyćCake\Network\Request::allowMethod() aby upewnić się, że używana jest poprawna metoda HTTP.

  • Form tampering protection- Domyślnie komponent SecurityComponent zapobiega modyfikowaniu formularzy przez użytkowników w określony sposób. SecurityComponent zapobiegnie następującym rzeczom -

    • Do formularza nie można dodawać nieznanych pól.

    • Nie można usunąć pól z formularza.

    • Wartości w ukrytych danych wejściowych nie można modyfikować.

  • Requiring that SSL be used - Wszystkie działania wymagające zabezpieczenia SSL

  • Limiting cross controller communication- Możemy ograniczyć, który administrator może wysłać żądanie do tego administratora. Możemy również ograniczyć, które akcje mogą wysłać żądanie do akcji tego administratora.

Przykład

Wprowadź zmiany w config/routes.php plik, jak pokazano w następującym programie.

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf');
   //$builder->connect('/pages',
      ['controller'=>'Pages','action'=>'display', 'home']);
   $builder->connect('login',['controller'=>'Logins','action'=>'index']);
   $builder->fallbacks();
});

Stwórz LoginsController.php plik w src/Controller/LoginsController.php. Skopiuj następujący kod w pliku kontrolera.

src/Controller/LoginsController.php

<?php
   namespace App\Controller;
   use App\Controller\AppController;
   class LoginsController extends AppController {
      public function initialize() : void {
         parent::initialize();
         $this->loadComponent('Security');
      }
         public function index(){
      }
   }
?>

Utwórz katalog Logins w src/Template iw tym katalogu utwórz plik Viewplik o nazwie index.php. Skopiuj następujący kod w tym pliku.

src/Template/Logins/index.php

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

Wykonaj powyższy przykład, odwiedzając następujący adres URL - http: // localhost / cakephp4 / login

Wynik

Po wykonaniu otrzymasz następujące dane wyjściowe.