Jeton anti-contrefaçon sur la page de connexion

j'ai implémenté un token antiforgery sur ma page de connexion.

maintenant j'ai eu un utilisateur appuyant sur la touche de retour sur le clavier, et quand ils cliquent à nouveau sur le bouton de connexion après avoir rempli leurs justificatifs d'identité, ils obtiennent la page d'erreur.

y a-t-il un meilleur moyen de gérer cette affaire comme de les rediriger vers frais page de connexion?

la Page qui est la page de login est : /compte/ouverture de session

si les informations de connexion sont complètes, l'utilisateur est redirigé vers :accueil / Page Index sur lequel l'utilisateur a appuyé sur le bouton retour.

17
demandé sur cpoDesign 2012-02-24 19:13:45

3 réponses

ne pas mettre en œuvre la ASP.NET AntiForgeryToken sur votre page de connexion. Le jeton est basé sur un nom d'utilisateur parmi d'autres critères, et une page de connexion assumer l'attaquant a déjà des informations d'identification d'un système afin d'être en mesure d'exploiter csrf sur cette page.

cependant, vous devez utiliser une forme de protection CSRF sur votre page de connexion-voir https://security.stackexchange.com/a/2126/51772

18
répondu Adam Tuliper - MSFT 2017-03-17 10:45:55

j'ai écrit une solution complète ici: http://richardcooke.info/keep-users-signed-in-after-asp-net-deploy /

voici le code nécessaire pour appeler dans votre controller votre méthode GET:

private void SetANewRequestVerificationTokenManuallyInCookieAndOnTheForm()
{
    if (Response == null)
        return;

    string cookieToken, formToken;
    AntiForgery.GetTokens(null, out cookieToken, out formToken); 
    SetCookie("__RequestVerificationToken", cookieToken);
    ViewBag.FormToken = formToken;
}

private void SetCookie(string name, string value)
{
   if (Response.Cookies.AllKeys.Contains(name))
       Response.Cookies[name].Value = value;
   else
       Response.Cookies.Add(new HttpCookie(name, value));
}

et code à mettre dans votre vue à la place de Html.AntiForgeryToken():

@if (ViewBag.FormToken != null)
{
    <text><input name="__RequestVerificationToken" type="hidden" value="@ViewBag.FormToken" /></text>
}
else
{
    <text>@Html.AntiForgeryToken()</text>
}
6
répondu Richard 2014-11-19 12:40:00

ma solution fut:

rechargez une page si elle se connecte à nouveau. cela permettra d'assurer un nouveau chargement de jeton antiforgery

et tout est fait

5
répondu cpoDesign 2012-04-05 07:29:10