Maison  >  Article  >  développement back-end  >  Middleware Laravel : utilisé pour empêcher les attaques de falsification de requêtes intersites (CSRF)

Middleware Laravel : utilisé pour empêcher les attaques de falsification de requêtes intersites (CSRF)

WBOY
WBOYoriginal
2023-07-30 16:27:29753parcourir

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表单中,我们可以通过在ff9c23ada1bcecdd1a0fb5d5a0f18437标签中添加一个隐藏的输入域,并将该输入域的值设置为CSRF token,来保护该表单免受CSRF攻击。

<form method="POST" action="/submit">
    @csrf
    <!-- 其他表单字段... -->
    <button type="submit">提交</button>
</form>

在上面的示例中,我们使用了@csrf指令来生成隐藏的CSRF token输入域。该指令会自动在生成的HTML中插入一个隐藏的d5fd7aea971a85678ba271703566ebfd标签,其名称为_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

Lorsque le middleware est enregistré, Laravel générera automatiquement un jeton pour chaque requête et le stockera dans la session. Chaque fois qu'une requête POST, PUT ou DELETE est envoyée, Laravel comparera le jeton de la requête avec le jeton stocké dans la session. S'ils sont incohérents, la requête sera rejetée et une erreur sera renvoyée.


Générer un jeton CSRF :

Laravel fournit une fonction d'assistance globale 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 ff9c23ada1bcecdd1a0fb5d5a0f18437 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 d5fd7aea971a85678ba271703566ebfd 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!

Déclaration:
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