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="">" .
L'environnement d'exploitation de cet article : système Windows 10, Laravel version 9, ordinateur Dell G3.
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(); ?>">
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('test6','Home\TestController@test6');Route::post('test7','Home\TestController@test7');
2. Créer des exigences Méthode
public function test6(){ return view('home.test.test6'); } public function test7() { return "请求提交成功"; }
3. Créez le formulaire simple requis
4 Soumettez l'effet (page d'erreur)
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>
Simplification de la méthode csrf_token : {{csrf_field( )}}
Forme d'expression spécifique :
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.
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
'home.test.test6',
Multiple The les éléments sont séparés par "," et suivent la méthode d'écriture du tableau.
'home.test.test6','home.test.test7'
Si vous devez exclure toutes les routes et utiliser csrf, vous pouvez écrire :
'*'
[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!