Laravel - Protezione CSRF

CSRF si riferisce agli attacchi Cross Site Forgery alle applicazioni web. Gli attacchi CSRF sono le attività non autorizzate svolte dagli utenti autenticati del sistema. Pertanto, molte applicazioni Web sono soggette a questi attacchi.

Laravel offre la protezione CSRF nel modo seguente:

Laravel include un plug-in CSRF integrato, che genera token per ogni sessione utente attiva. Questi token verificano che le operazioni o le richieste siano inviate dall'utente autenticato interessato.

Implementazione

L'implementazione della protezione CSRF in Laravel è discussa in dettaglio in questa sezione. I seguenti punti sono importanti prima di procedere ulteriormente sulla protezione CSRF:

  • CSRF è implementato all'interno di form HTML dichiarati all'interno delle applicazioni web. Devi includere un token CSRF convalidato nascosto nel modulo, in modo che il middleware di protezione CSRF di Laravel possa convalidare la richiesta. La sintassi è mostrata di seguito:

<form method = "POST" action="/profile">
   {{ csrf_field() }}
   ...
</form>
  • È possibile creare comodamente applicazioni basate su JavaScript utilizzando la libreria HTTP JavaScript, poiché include il token CSRF per ogni richiesta in uscita.

  • Il file vale a dire resources/assets/js/bootstrap.js registra tutti i token per le applicazioni Laravel e include meta tag che memorizza csrf-token con Axios HTTP library.

Modulo senza token CSRF

Considera le seguenti righe di codice. Mostrano un modulo che accetta due parametri come input:email e message.

<form>
   <label> Email </label>
      <input type = "text" name = "email"/>
      <br/>
   <label> Message </label> <input type="text" name = "message"/>
   <input type = ”submit” name = ”submitButton” value = ”submit”>
</form>

Il risultato del codice di cui sopra è il modulo mostrato di seguito che l'utente finale può visualizzare -

Il modulo mostrato sopra accetterà qualsiasi informazione in ingresso da un utente autorizzato. Ciò potrebbe rendere l'applicazione Web soggetta a vari attacchi.

Tieni presente che il pulsante di invio include funzionalità nella sezione controller. IlpostContactviene utilizzata nei controller per le viste associate. È mostrato di seguito -

public function postContact(Request $request) {
   return $request-> all();
}

Si noti che il modulo non include token CSRF, quindi le informazioni sensibili condivise come parametri di input sono soggette a vari attacchi.

Modulo con token CSRF

Le seguenti righe di codice mostrano il modulo riprogettato utilizzando i token CSRF:

<form method = ”post” >
   {{ csrf_field() }}
   <label> Email </label>
   <input type = "text" name = "email"/>
   <br/>
   <label> Message </label>
   <input type = "text" name = "message"/>
   <input type = ”submit” name = ”submitButton” value = ”submit”>
</form>

L'output ottenuto restituirà JSON con un token come indicato di seguito -

{
   "token": "ghfleifxDSUYEW9WE67877CXNVFJKL",
   "name": "TutorialsPoint",
   "email": "[email protected]"
}

Questo è il token CSRF creato facendo clic sul pulsante di invio.