web-dev-qa-db-fra.com

ValidateAntiForgeryToken, explication et exemple

Pourriez-vous expliquer le but ValidateAntiForgeryToken et me montrer un exemple à propos de ValidateAntiForgeryToken dans MVC 4?

Je n'ai trouvé aucun exemple expliquant cet attribut?

283
Tabriz Atayi

La prise en charge anti-falsification de MVC écrit une valeur unique dans un cookie uniquement HTTP, puis la même valeur est écrite dans le formulaire. Lorsque la page est soumise, une erreur est générée si la valeur du cookie ne correspond pas à la valeur du formulaire.

Il est important de noter que la fonctionnalité empêche falsifications de requêtes intersites . Autrement dit, un formulaire d'un autre site qui publie sur votre site dans le but de soumettre du contenu masqué à l'aide des informations d'identification d'un utilisateur authentifié. L'attaque consiste à inciter l'utilisateur connecté à soumettre un formulaire, ou simplement à déclencher un formulaire par programme lors du chargement de la page.

Cette fonctionnalité n'empêche aucun autre type d'attaque basée sur la falsification de données ou la falsification.

Pour l'utiliser, décorez la méthode d'action ou le contrôleur avec l'attribut ValidateAntiForgeryToken et passez un appel à @Html.AntiForgeryToken() dans les formulaires envoyés à la méthode.

333
Richard Szalay

L'objectif fondamental de l'attribut ValidateAntiForgeryToken est d'empêcher les attaques par falsification de requêtes entre sites.

Une falsification de requête intersite est une attaque dans laquelle un élément de script nuisible, une commande malveillante ou un code est envoyé à partir du navigateur d'un utilisateur de confiance. Pour plus d'informations à ce sujet, visitez le site http://www.asp.net/mvc/overview/security/xsrfcsrf-prevention-in-aspnet-mvc-and-web-pages .

C'est simple à utiliser, vous devez décorer la méthode avec l'attribut ValidateAntiForgeryToken comme ci-dessous:

[HttpPost]  
[ValidateAntiForgeryToken]  
public ActionResult CreateProduct(Product product)  
{
  if (ModelState.IsValid)  
  {
    //your logic 
  }
  return View(ModelName);
}

Il est dérivé de l'espace de noms System.Web.Mvc.

Et à votre avis, ajoutez ce code pour ajouter le jeton afin qu'il soit utilisé pour valider le formulaire lors de sa soumission.

@Html.AntiForgeryToken()
45
Chandra Malla

Microsoft nous fournit des fonctionnalités intégrées que nous utilisons dans notre application à des fins de sécurité, afin que personne ne puisse pirater notre site ou envahir des informations critiques.

Utilisation de ValidateAntiForgeryToken

Essayons avec un exemple simple de comprendre ce concept. Je ne veux pas trop compliquer les choses, c’est pourquoi je vais utiliser un modèle d’application MVC, déjà disponible dans Visual Studio. Nous allons procéder étape par étape. Commençons.

  1. Étape 1 - Créez deux applications MVC avec un modèle Internet par défaut et attribuez-leur respectivement les noms CrossSite_RequestForgery et Attack_Application.

  2. Maintenant, ouvrez la configuration Web de l'application CrossSite_RequestForgery et modifiez la chaîne de connexion avec celle indiquée ci-dessous, puis enregistrez.

`

<connectionStrings> <add name="DefaultConnection" connectionString="Data Source=local\SQLEXPRESS;Initial Catalog=CSRF; Integrated Security=true;" providerName="System.Data.SqlClient" /> 
 </connectionStrings>

`

  1. Maintenant, cliquez sur Outils >> NuGet Package Manager, puis sur Package Manager Console.

  2. Maintenant, exécutez les trois commandes mentionnées ci-dessous dans Package Manager Console pour créer la base de données.

Enable-Migrations add-migration première mise à jour-base de données

Remarques importantes - J'ai créé une base de données avec une approche code en premier parce que je veux faire de cet exemple un exemple de la manière dont les développeurs travaillent. Vous pouvez également créer la base de données manuellement. C'est ton choix.

  1. Maintenant, ouvrez le contrôleur de compte. Ici, vous verrez une méthode de registre dont le type est post. Au-dessus de cette méthode, un attribut doit être disponible sous la forme [ValidateAntiForgeryToken]. Commentez cet attribut. Maintenant, cliquez avec le bouton droit sur enregistrer et cliquez sur aller à Voir. Là encore, vous trouverez un assistant HTML sous la forme @ Html.AntiForgeryToken (). Commentez celui-ci aussi. Exécutez l'application et cliquez sur le bouton d'enregistrement. L'URL sera ouvert en tant que:

http: // localhost: 52269/Account/Register

Notes - Je sais maintenant que la question qui se pose dans l'esprit de tous les lecteurs est la raison pour laquelle ces deux aides doivent être commentés, car tout le monde sait qu'ils sont utilisés pour valider demande. Ensuite, je tiens simplement à vous faire savoir que c’est simplement parce que je veux montrer la différence après et avant d’appliquer ces aides.

  1. Maintenant, ouvrez la deuxième application qui est Attack_Application. Ensuite, ouvrez la méthode Register de Account Controller. Il suffit de changer la méthode POST avec la méthode simple, illustrée ci-dessous.

    Formulaire d'inscription
    1. @ Html.LabelFor (m => m.NomUtilisateur) @ Html.TextBoxFor (m => m.NomUtilisateur)
    2. @ Html.LabelFor (m => m.Password) @ Html.PasswordFor (m => m.Password)
    3. @ Html.LabelFor (m => m.ConfirmPassword) @ Html.PasswordFor (m => m.ConfirmPassword)

7. Maintenant, supposons que vous êtes un pirate informatique et que vous connaissez l'URL à partir de laquelle vous pouvez enregistrer un utilisateur dans l'application CrossSite_RequestForgery. Vous venez de créer un site de contrefaçon sous le nom Attacker_Application et de mettre la même URL dans la méthode post.

8.Lancez cette application maintenant et remplissez les champs du registre, puis cliquez sur le registre. Vous verrez que vous êtes enregistré dans l'application CrossSite_RequestForgery. Si vous vérifiez la base de données de l'application CrossSite_RequestForgery, vous verrez alors l'entrée que vous avez entrée.

  1. Important: ouvrez maintenant l'application CrossSite_RequestForgery, commentez le jeton dans Account Controller et enregistrez la vue. Essayez de vous enregistrer à nouveau avec le même processus. Ensuite, une erreur se produira comme ci-dessous.

Erreur serveur dans l'application '/'.


Le cookie anti-contrefaçon requis "__RequestVerificationToken" n'est pas présent.

C'est ce que dit le concept. Ce que nous ajoutons dans View i.e. @ Html.AntiForgeryToken () génère __RequestVerificationToken au moment du chargement et [ValidateAntiForgeryToken] est disponible dans la méthode du contrôleur. Faites correspondre ce jeton au moment de la publication. Si le jeton est identique, cela signifie que la demande est valide.

1
Vinayak Savale