Maison > cadre php > Laravel > Solution à l'attaque CSRF dans Laravel

Solution à l'attaque CSRF dans Laravel

WBOY
Libérer: 2022-06-21 16:07:53
original
3577 Les gens l'ont consulté

Solution : 1. Utilisez Laravel pour générer automatiquement un "Jeton CSRF" pour chaque session utilisateur. Ce jeton peut être utilisé pour vérifier si l'utilisateur connecté et le demandeur sont la même personne. Sinon, la demande échouera 2 ; . Fournissez un Utilisez la fonction d'aide globale "csrf_token" pour obtenir la valeur du jeton. Ajoutez simplement le code du jeton dans le formulaire de soumission de vue. La syntaxe est "<...value php="" echo="">" .

Solution à l'attaque CSRF dans Laravel

L'environnement d'exploitation de cet article : système Windows 10, Laravel version 9, ordinateur Dell G3.

Solution aux attaques CSRF dans Laravel

CSRF est l'abréviation anglaise de Cross-site request forgery ;

Éviter les attaques CSRF dans le framework Laravel est très simple :

1 Laravel fournit automatiquement une solution pour chaque session utilisateur ; Jeton CSRF, qui peut être utilisé pour vérifier si l'utilisateur connecté et le demandeur sont la même personne. Dans le cas contraire, la demande échoue. (Le principe est le même que le code de vérification.)

2. Laravel fournit une fonction d'assistance globale csrf_token pour obtenir la valeur du jeton, il vous suffit donc d'ajouter le code HTML suivant au formulaire de soumission de vue pour amener le jeton dans le request :

<input type="hidden" name="_token" value="<?php echo csrf_token(); ?>">
Copier après la connexion

Comment éviter les attaques CSRF dans Laravel

Cas : Implémenter la vérification du mécanisme CSRF via des cas
1 Créez deux routes, une pour afficher le formulaire (get) et l'autre pour traiter les demandes (post)

.
Route::get(&#39;test6&#39;,&#39;Home\TestController@test6&#39;);Route::post(&#39;test7&#39;,&#39;Home\TestController@test7&#39;);
Copier après la connexion

2. Créer des exigences Méthode

	 public function test6(){
        return view(&#39;home.test.test6&#39;);
     }
     public function test7()
     {
         return "请求提交成功";
     }
Copier après la connexion

3. Créez le formulaire simple requis

Solution à lattaque CSRF dans Laravel

4 Soumettez l'effet (page d'erreur)

Solution à lattaque CSRF dans Laravel

Conclusion : À travers le cas tout à l'heure, cela montre que la vérification csrf. le mécanisme dans Laravel est activé par défaut.

5. Résoudre le problème d'erreur (comment réussir la vérification csrf)
Solution : apporter la valeur du jeton requise pour csrf, et la transmettre à la méthode suivante avec la requête

<form action="/home/test/test7" method="post">
    用户名:<input type="text" name="username"><br>
    <input type="hidden" name="_token" value="{{csrf_token()}}">
    {{csrf_field()}}
    <input type="submit" value="提交"></form>
Copier après la connexion

Simplification de la méthode csrf_token : {{csrf_field( )}}

Forme d'expression spécifique :

Solution à lattaque CSRF dans Laravel

La différence entre les deux :
Csrf_token génère uniquement la valeur du jeton
Csrf_field génère un champ masqué d'entrée entier

Comment choisir lors de son utilisation ultérieure : Dans la plupart Dans certains cas, vous pouvez décider vous-même de la sélection de la situation. Cependant, il existe une situation où le développeur n'a pas le droit de choisir et doit utiliser csrf_token. Dans ce cas, la méthode de soumission de formulaire asynchrone est utilisée.

Exclure le routage des exceptions de la validation CSRF

Toutes les requêtes n'ont pas besoin d'éviter les attaques CSRF, telles que les requêtes adressées à des API tierces pour obtenir des données.
Vous pouvez ajouter l'URL de demande à exclure au tableau d'attributs $sauf dans le middleware VerifyCsrfToken (app/Http/Middleware/VerifyCsrfToken.php) :

Définissez les exceptions en écrivant la configuration :
Écriture d'exclusion de route unique

 &#39;home.test.test6&#39;,
Copier après la connexion

Multiple The les éléments sont séparés par "," et suivent la méthode d'écriture du tableau.

&#39;home.test.test6&#39;,&#39;home.test.test7&#39;
Copier après la connexion

Si vous devez exclure toutes les routes et utiliser csrf, vous pouvez écrire :

&#39;*&#39;
Copier après la connexion

[Recommandations associées : tutoriel vidéo laravel]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal