0% ont trouvé ce document utile (0 vote)
36 vues7 pages

CSRF Séance 4

Le document explique comment sécuriser les formulaires Laravel contre les attaques CSRF (Cross-Site Request Forgery) en utilisant des jetons CSRF générés automatiquement. Il décrit le fonctionnement de la protection CSRF, les méthodes d'implémentation dans les formulaires HTML, et comment exclure certaines URI de cette protection. Des exemples de code sont fournis pour illustrer l'utilisation de la directive @csrf et de la fonction csrf_token().

Transféré par

aracasablanca7
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
36 vues7 pages

CSRF Séance 4

Le document explique comment sécuriser les formulaires Laravel contre les attaques CSRF (Cross-Site Request Forgery) en utilisant des jetons CSRF générés automatiquement. Il décrit le fonctionnement de la protection CSRF, les méthodes d'implémentation dans les formulaires HTML, et comment exclure certaines URI de cette protection. Des exemples de code sont fournis pour illustrer l'utilisation de la directive @csrf et de la fonction csrf_token().

Transféré par

aracasablanca7
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Protection CSRF

Sécuriser les formulaires avec Laravel


1. Objectifs
o Connaitre les méthodes de sécurisation d’un formulaire avec Laravel.
o Etre capable de sécuriser un formulaire laravel.

2. Présentation
o Un formulaire est un vecteur d’attaque potentiel pour une personne
malveillante.

o Laravel propose par défaut un mécanisme de défense face aux attaques de type
CSRF (Cross-Site Request Forgery).

o Dans ce formulaire on va voir comment protéger très facilement une


application Laravel contre les attaques CSRF (Cross Site Request Forgery)

o La forme complète de CSRF est la falsification de requêtes intersites. Il s’agit


d’un type d’attaque en ligne dans lequel l’attaquant envoie des demandes en
tant qu’utilisateur autorisé à un système en obtenant des informations d’accès
d’un utilisateur particulier de ce système et effectue différents types d’activités
malveillantes en utilisant l’identité de cet utilisateur. L’impact de cette attaque
dépend des privilèges de la victime sur le système.

o Si la victime est un utilisateur normal, cela n’affectera que les données


personnelles de la victime. Mais si la victime est l’administrateur du système,
l’attaquant peut endommager l’ensemble du système.
3. Fonctionnement du CSRF
o La falsification de requêtes intersites (CSRF) est un type d’attaque effectué par
l’attaquant pour envoyer des requêtes à un système avec l’aide d’un utilisateur
autorisé auquel le système fait confiance.

o Laravel fournit une protection contre les attaques CSRF en générant un jeton
CSRF. Ce jeton CSRF est généré automatiquement pour chaque utilisateur.
Ce jeton n’est rien d’autre qu’une chaîne aléatoire gérée par l’application
Laravel pour vérifier les demandes des utilisateurs.

o Cette protection de jeton CSRF peut être appliquée à n’importe quel formulaire
HTML dans l’application Laravel en spécifiant un champ de formulaire caché
du jeton CSRF.

o Une des manières efficaces de se prémunir contre les attaques CSRF est
d’accompagner chaque formulaire à protéger d’un jeton (en anglais “token”)
d’identification de session.
o Pour ce faire, lorsqu’un visiteur se connecte sur votre site, vous enregistrez en
session une chaîne de caractère aléatoire.

o Cette même chaîne est récupérée en session et passée au formulaire, sous la


forme d’un champ de type “hidden“.
o Lorsque le formulaire est posté, votre système de validation doit vérifier que
le champ caché contient la même valeur que celle enregistrée en session.
o Si ça n’est pas le cas, ça signifie que quelqu’un a essayé de soumettre le
formulaire depuis un autre endroit que votre site. Il faut alors annuler le
traitement de ce formulaire.

Laravel inclut un plug-in CSRF intégré, qui génère des jetons pour chaque
session utilisateur active. Ces jetons vérifient que les opérations ou requêtes
sont envoyées par l’utilisateur authentifié concerné.

4. La mise en œuvre
o CSRF est implémenté dans les formulaires HTML déclarés dans les
applications Web. Vous devez inclure un jeton CSRF validé masqué dans le
formulaire, afin que le middleware de protection CSRF de Laravel puisse
valider la demande.
o La protection CSRF peut être implémentée dans Laravel à l’aide de n’importe
quel formulaire HTML avec une forme cachée de jeton CSRF et la demande
de l’utilisateur est validée à l’aide du middleware CSRF VerifyCsrfToken.
o L’une des options suivantes peut être utilisée pour générer un jeton CSRF.
1. @csrf
 C’est une directive de Blade pour générer un champ de jeton qui sera
utilisé pour la vérification. Il génère un champ de saisie masqué.
 Lorsque la directive blade @csrf est utilisée, une balise input de
type=’hidden‘ est ajoutée au formulaire.
 La valeur sera le jeton CSRF qui sera envoyé dans le cadre des
données du formulaire lorsque le formulaire est soumis.

 Activité
 Créez un fichier de vue Laravel nommé [Link] avec le
code HTML suivant où la directive @csrf est utilisée pour générer le
jeton CSRF.

<form action="{{route('details')}}" method="POST" >


@csrf
<label>Email address</label>
<input name="email" type="email">
<label>Password</label>
<input type="password" name="password" >
<button type="submit">Submit</button>
</form>

 Dans le fichier [Link] pour charger le fichier de vue dans le


navigateur. Lorsque l’utilisateur donnera form-csrf après l’URL
de base ([Link] il recherchera le
fichier [Link] dans le dossier de vue du projet
Laravel.

Route::get('/form-csrf', function () {return


view('form-csrf');});

 Si vous inspectez la page après l’exécution, vous obtiendrez la


sortie comme ci-dessous. Ici, un champ masqué avec la valeur est
généré automatiquement par la directive @csrf.
2. csrf_token ()
 Cette fonction peut être utilisée dans la balise meta et le champ de
saisie masqué du formulaire HTML. Il génère une chaîne aléatoire en
tant que jeton CSRF.
 Mettez à la place de @csrf dans la vue Laravel nommé form-
[Link] la fonction csrf_token () est utilisée pour générer le
jeton CSRF. Cette fonction est utilisée comme valeur de l’attribut
value du champ masqué et est utilisée avec deux accolades.

 Syntaxe

<form method = "POST">


<input type = "hidden" name = "_ token" value =
"{{csrf_token ()}}">
.....
.....
</form>

 Si vous inspectez la page après l’exécution, vous obtiendrez la même


sortie de l’exemple précédent.

 Veuillez noter que le bouton d’envoi inclut des fonctionnalités


dans la section fonction de rappel. Il est montré ci-dessous:

Route::post('/details', function (Request $req) {

return $req->all();
})->name('details');

 La sortie obtenue renverra JSON avec un jeton comme indiqué


ci-dessous:
Si le jeton CSRF n'est pas présent dans la demande de formulaire envoyée ou s'il
semble invalide, Laravel envoie un message d'erreur "Page Expired" avec un
code d'état 419.

3. Exclure les URI de la protection CSRF


Parfois, vous souhaiterez peut-être exclure un ensemble d'URI de la protection
CSRF. En règle générale, vous devez placer ces types de routes en dehors du groupe
web de middleware App\Providers\RouteServiceProvider qui s'applique à toutes
les routes du fichier routes/[Link]. Cependant, vous pouvez également exclure les
routes en ajoutant leurs URI à la propriété $except du middleware
VerifyCsrfToken :

<?php

namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as
Middleware;

class VerifyCsrfToken extends Middleware


{
/**
* The URIs that should be excluded from CSRF
verification.
*
* @var array<int, string>
*/
protected $except = [
'/details'
];
}

Maintenant essayez de poster à nouveau le formulaire en supprimant @csrf.

Vous aimerez peut-être aussi