Maison >cadre php >Laravel >Contrefaçon de formulaire de Laravel et protection CSRF

Contrefaçon de formulaire de Laravel et protection CSRF

齐天大圣
齐天大圣original
2020-12-14 11:23:311660parcourir

Nous savons que la spécification de conception d'API la plus populaire actuellement est la conception d'API restFul. Restful propose cinq méthodes HTTP courantes, à savoir : obtenir, publier, mettre, corriger et supprimer. Il est très simple de construire la méthode get ou post à l'aide du formulaire HTML, mais les trois autres méthodes ne sont pas prises en charge. Mais dans Laravel, vous pouvez utiliser les trois autres méthodes mentionnées ci-dessus grâce à la technologie de falsification de formulaire.

Tutoriel recommandé : "framework laravel"

Travail de préparation

Nous devons d'abord nous préparer Travail bien fait. Nous devons créer deux routes : une route de formulaire et une route qui accepte les formulaires.

// 表单页
Route::get('form', function () {
    return view('form');
});

// 接受表单请求
Route::any('getform', function () {
    return \Illuminate\Support\Facades\Request::method();
});

Au début, nous avons créé le formulaire de demande d'obtention le plus simple, le contenu est le suivant :

<form method="get" action="/getform">
    <input type="submit" value="sub" />
</form>

Après avoir cliqué sur le bouton de soumission, 'GET' apparaît dans le navigateur, indiquant que l'obtention la demande a été envoyée et acceptée avec succès.

Protection CSRF

Ensuite, nous passons à la méthode de publication, puis actualisons et cliquons sur le bouton Soumettre pour voir ce qui se passe. Vous trouverez une erreur avec "page expirée" et le code d'état 419. Pourquoi Laravel ne peut-il pas accepter les demandes de publication ? Nous présenterons ici le mécanisme de protection CSRF par défaut de Laravel.

Afin d'empêcher les attaques de falsification de requêtes intersites, laravel fournit une protection par jeton CSRF. Par conséquent, pour toutes les méthodes à l'exception de la requête de la méthode get, vous devez ajouter le jeton CSRF au formulaire, comme suit :

<input type="hidden" name="_token" value="{{csrf_token()}}">

Il a également une méthode d'abréviation, comme suit :

@csrf

Désactivez la fonction de protection CSRF

Ce n'est généralement pas le cas Il est recommandé de désactiver la fonction CSRF de l'ensemble du site. Il est très simple de la désactiver, il suffit de commenter la ligne

\App\Http\Middleware\VerifyCsrfToken::class

dans le fichier Kernel.php.

Liste blanche CSRF

Souvent, nous devons définir un ensemble d'URL qui ne nécessitent pas de protection CSRF, telles que les interfaces API fournies par des tiers , nous espérons que toutes les interfaces API externes ne nécessiteront pas de protection CSRF. Ensuite, vous pouvez utiliser la fonction de liste blanche CSRF pour définir la liste blanche dans le fichier app/Http/Middleware/VerifyCsrfToken.php. Comme suit :

class VerifyCsrfToken extends Middleware
{
    /**
     * The URIs that should be excluded from CSRF verification.
     *
     * @var array
     */
    protected $except = [
        /* 这里是白名单列表 */
        &#39;http://example.com/api/*&#39;,
        &#39;api/*&#39;,
        &#39;a/b/*&#39;
    ];
}

Remarque : Pour faciliter les tests, la fonction csrf sera automatiquement désactivée lors du test de l'environnement

Faux de formulaire

Après avoir appris le mécanisme de protection CSRF, voyons comment falsifier des formulaires. Il est très simple de falsifier un formulaire, il suffit d'ajouter

<input type="hidden" name="_method" value="PUT">

ou de l'abréger en

@method(&#39;PUT&#39;)

Ce qui suit est un formulaire pour falsifier une demande de vente

@csrf @method(&#39;PUT&#39;)

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