Middleware Laravel : utilisé pour empêcher les attaques de falsification de requêtes intersites (CSRF)
Présentation :
Dans les applications Internet, les attaques de falsification de requêtes intersites (CSRF) sont une menace courante pour la sécurité des réseaux. Les attaques CSRF forgent des requêtes malveillantes pour permettre aux utilisateurs d'effectuer des opérations illégales à leur insu, comme changer de mot de passe, transférer des fonds, etc. Pour empêcher ce type d'attaque, Laravel fournit un middleware intégré qui peut facilement protéger les applications contre les attaques CSRF.
Utilisation du middleware CSRF :
Dans Laravel, l'utilisation du middleware CSRF est très simple. Tout d'abord, nous devons enregistrer le middleware dans le fichier de routage de l'application. Ouvrez le fichier app/Http/Kernel.php
, recherchez le groupe de middleware web
et ajoutez-y le middleware VerifyCsrfToken
, comme indiqué ci-dessous : app/Http/Kernel.php
文件,找到web
中间件组,并在其中添加VerifyCsrfToken
中间件,如下所示:
protected $middlewareGroups = [ 'web' => [ // 其他中间件... AppHttpMiddlewareVerifyCsrfToken::class, ], // 其他中间件组... ];
当注册了该中间件后,Laravel会自动为每个请求生成一个token,并将其存储在session中。每次发送POST、PUT、DELETE请求时,Laravel会比对请求中的token和存储在session中的token是否一致,如果不一致,则会拒绝请求并返回一个错误。
生成CSRF token:
Laravel提供了一个全局的csrf_token
辅助函数,用于在视图中生成一个CSRF token。在HTML表单中,我们可以通过在<form>
标签中添加一个隐藏的输入域,并将该输入域的值设置为CSRF token,来保护该表单免受CSRF攻击。
<form method="POST" action="/submit"> @csrf <!-- 其他表单字段... --> <button type="submit">提交</button> </form>
在上面的示例中,我们使用了@csrf
指令来生成隐藏的CSRF token输入域。该指令会自动在生成的HTML中插入一个隐藏的<input>
标签,其名称为_token
,值为CSRF token。
如果你使用Laravel内置的表单辅助函数(如Form::open
),则不需要手动添加CSRF token输入域,Laravel会自动为你生成。
手动验证CSRF token:
除了自动验证之外,Laravel也提供了手动验证CSRF token的方法,以便我们在控制器或路由回调中完成更细粒度的验证。我们可以使用csrf_token
辅助函数来获取当前请求的CSRF token,并通过调用Request
对象的session
方法来获取存储在session中的token。
下面是一个在控制器中手动验证CSRF token的示例:
<?php namespace AppHttpControllers; use IlluminateHttpRequest; use IlluminateSupportFacadesSession; class UserController extends Controller { public function updateProfile(Request $request) { $token = $request->input('_token'); if (!hash_equals(Session::token(), $token)) { // CSRF token验证失败 abort(403, 'Unauthorized action.'); } // CSRF token验证通过,继续处理操作 // ... } }
在上述示例中,我们使用了hash_equals
rrreee
Générer un jeton CSRF :
csrf_token
pour générer un jeton CSRF dans la vue. Dans un formulaire HTML, nous pouvons protéger le formulaire contre les attaques CSRF en ajoutant un champ de saisie masqué dans la balise <form>
et en définissant la valeur du champ de saisie sur le jeton CSRF. 🎜rrreee🎜Dans l'exemple ci-dessus, nous avons utilisé la directive @csrf
pour générer un champ de saisie de jeton CSRF caché. Cette commande insérera automatiquement une balise <input>
cachée dans le HTML généré, avec le nom _token
et la valeur étant le jeton CSRF. 🎜🎜Si vous utilisez la fonction d'assistance de formulaire intégrée de Laravel (telle que Form::open
), vous n'avez pas besoin d'ajouter manuellement le champ de saisie du jeton CSRF, Laravel le générera automatiquement pour vous. 🎜🎜Vérifier manuellement le jeton CSRF : 🎜En plus de la vérification automatique, Laravel fournit également une méthode pour vérifier manuellement le jeton CSRF, afin que nous puissions effectuer une vérification plus fine dans le contrôleur ou le rappel de routage. Nous pouvons utiliser la fonction d'assistance csrf_token
pour obtenir le jeton CSRF de la requête en cours, et obtenir la méthode session
stockée dans la session en appelant la Request
objet. 🎜🎜Ce qui suit est un exemple de vérification manuelle du jeton CSRF dans le contrôleur : 🎜rrreee🎜Dans l'exemple ci-dessus, nous avons utilisé la fonction hash_equals
pour comparer si le jeton dans la requête est cohérent avec le jeton dans la session, assurez la sécurité de la vérification du jeton CSRF. 🎜🎜Résumé : 🎜Le middleware CSRF de Laravel fournit un moyen simple mais puissant de prévenir les attaques de falsification de requêtes intersites. En générant et en validant automatiquement les jetons CSRF, nous pouvons protéger efficacement nos applications contre les requêtes malveillantes. Qu'il s'agisse de vérification automatique ou de vérification manuelle, Laravel nous offre des options flexibles et fiables pour sécuriser nos applications. 🎜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!