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.