CakePHP - Sicurezza
La sicurezza è un'altra caratteristica importante durante la creazione di applicazioni web. Assicura agli utenti del sito che i loro dati sono protetti. CakePHP fornisce alcuni strumenti per proteggere la tua applicazione.
Crittografia e decrittografia
La libreria di sicurezza in CakePHP fornisce metodi con i quali possiamo crittografare e decrittografare i dati. Di seguito sono riportati i due metodi utilizzati per lo stesso scopo.
static Cake\Utility\Security::encrypt($text, $key, $hmacSalt = null)
static Cake\Utility\Security::decrypt($cipher, $key, $hmacSalt = null)
Il metodo di crittografia prenderà testo e chiave come argomento per crittografare i dati e il valore restituito sarà il valore crittografato con checksum HMAC.
Per eseguire l'hash di un dato, hash()viene utilizzato il metodo. Di seguito è riportata la sintassi del metodo hash ().
static Cake\Utility\Security::hash($string, $type = NULL, $salt = false)
CSRF
CSRF sta per Cross Site Request Forgery. Abilitando il componente CSRF, ottieni protezione dagli attacchi. CSRF è una vulnerabilità comune nelle applicazioni web.
Consente a un utente malintenzionato di acquisire e riprodurre una richiesta precedente e, talvolta, inviare richieste di dati utilizzando tag immagine o risorse su altri domini. Il CSRF può essere abilitato semplicemente aggiungendo il fileCsrfComponent all'array di componenti come mostrato di seguito -
public function initialize(): void {
parent::initialize();
$this->loadComponent('Csrf');
}
Il CsrfComponent si integra perfettamente con FormHelper. Ogni volta che crei un modulo con FormHelper, verrà inserito un campo nascosto contenente il token CSRF.
Sebbene ciò non sia consigliato, potresti voler disabilitare CsrfComponent su determinate richieste. Puoi farlo utilizzando il dispatcher di eventi del controller, durante ilbeforeFilter() metodo.
public function beforeFilter(Event $event) {
$this->eventManager()->off($this->Csrf);
}
Componente di sicurezza
Il componente di sicurezza applica una protezione più rigorosa alla tua applicazione. Fornisce metodi per varie attività come:
Restricting which HTTP methods your application accepts- Dovresti sempre verificare il metodo HTTP, utilizzato prima di eseguire gli effetti collaterali. È necessario controllare il metodo HTTP o utilizzareCake\Network\Request::allowMethod() per garantire che venga utilizzato il metodo HTTP corretto.
Form tampering protection- Per impostazione predefinita, SecurityComponent impedisce agli utenti di manomettere i moduli in modi specifici. Il SecurityComponent impedirà le seguenti cose:
I campi sconosciuti non possono essere aggiunti al modulo.
I campi non possono essere rimossi dal modulo.
I valori negli input nascosti non possono essere modificati.
Requiring that SSL be used - Tutte le azioni richiedono una protezione SSL
Limiting cross controller communication- Possiamo limitare il controller che può inviare la richiesta a questo controller. Possiamo anche limitare le azioni che possono inviare richieste all'azione di questo controller.
Esempio
Apporta modifiche nel file config/routes.php file come mostrato nel seguente programma.
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();
});
Creare un LoginsController.php file in src/Controller/LoginsController.php. Copiare il codice seguente nel file del controller.
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(){
}
}
?>
Crea una directory Logins a src/Template e in quella directory creare un file Viewfile chiamato index.php. Copia il codice seguente in quel file.
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();
?>
Esegui l'esempio precedente visitando il seguente URL: http: // localhost / cakephp4 / login
Produzione
Dopo l'esecuzione, riceverai il seguente output.