Le cookie anti-falsification requis "__RequestVerificationToken" n'est pas présent
Mon site est de soulever cette exception autour de 20 fois par jour, généralement le formulaire fonctionne très bien mais il y a des cas où ce problème se produit et je ne sais pas pourquoi il est si aléatoire.
Cela est consigné exception par elmah
500 HttpAntiForgery Le nécessaire anti-contrefaçon cookie __RequestVerificationToken" n'est pas présent.
Mais la forme, c'est l'envoi de la le jeton comme indiqué sur le journal XML par elmah
<form>
<item name="__RequestVerificationToken">
<value string="DNbDMrzHmy37GPS6IFH-EmcIh4fJ2laezIrIEev5f4vOhsY9T7SkH9-1b7GPjm92CTFtb4dGqSe2SSYrlWSNEQG1MUlNyiLP1wtYli8bIh41"/>
</item>
<item name="toPhone">
<value string="XXXXXX"/>
</item>
<item name="smsMessage">
<value string="xxxxxxxx"/>
</item>
</form>
C'est ma méthode sur le contrôleur qui utilise l'Attribut de données pour vérifier si le jeton est valide ou non
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<JsonResult> Send(SMSModel model)
{
//my code goes here
}
C'est mon formulaire sur la vue
@using (Html.BeginForm("Send", "SMS", FormMethod.Post, new { @class = "form-sms", autocomplete = "off" }))
{
@Html.AntiForgeryToken()
<div class="row">
<div class="col-md-12">
<div class="form-group">
<div class="input-group">
<div class="input-group-addon">+53</div>
@Html.TextBoxFor(m => m.toPhone, new { @class = "form-control", placeholder = "teléfono", required = "required", type = "tel", maxlength = 8 })
</div>
</div>
</div>
</div>
<div class="form-group" style="position:relative">
<label class="sr-only" for="exampleInputEmail3">Message (up to 135 characters)</label>
@Html.TextAreaFor(m => m.smsMessage, new { rows = 4, @class = "form-control", placeholder = "escriba aquí su mensaje", required = "required", maxlength = "135" })
<span class="char-count">135</span>
</div>
if (ViewBag.Sent == true)
{
<div class="alert alert-success alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
<strong>Su mensaje ha sido enviado <span class="hidden-xs">satisfactoriamente</span></strong>
</div>
}
if (ViewBag.Error == true)
{
<div class="alert alert-danger alert-dismissible" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
<strong>Error:</strong> Por favor revise el número de teléfono.
</div>
}
<div class="errorToMany"></div>
<button type="submit" class="btn btn-default btn-block">Enviar SMS</button>
}
Et de cette façon je poste mes données à l'aide d'AJAX
$('form.form-sms').submit(function (event) {
$.ajax({
url: $(this).attr("action"),
type: "POST",
data: $(this).serializeArray(),
beforeSend: function (xhr) {
$('.btn-default').attr("disabled", true);
$('.btn-default').html("Enviando...")
},
success: function (data, textStatus, jqXHR) {
if (data[0] == false && data[1] == "1") {
some code
} else {
location.reload();
}
},
error: function (jqXHR, textStatus, errorThrown) { }
});
return false;
});
Le formulaire fonctionne bien la plupart du temps, mais cette erreur continue à se produire et je ne sais pas pourquoi, j'ai vérifié d'autres questions ici sur un Débordement de Pile mais rien ne fonctionne pour moi.
Pour plus d'explications sur la façon dont je post les données.
Ce formulaire pour envoyer des SMS a les champs ToNumber et le Message. Lorsqu'un utilisateur clique sur le Bouton soumettre l'AJAX fonction prend le contrôle et le poster de la sérialisation de la forme du champ de données, lors de ma fonction dans le contrôleur de finitions et de retourner le résultat JSON indiquant que tout s'est bien passé, l'AJAX méthode de recharge la page montrant à l'utilisateur un message de réussite.
Les idées de ce que pourrait être l'origine de ce problème.
source d'informationauteur General Electric
Vous devez vous connecter pour publier un commentaire.
Il semble comme si les choses fonctionnent comme prévu.
Le chemin de la lutte anti contrefaçon helper
@Html.AntiForgeryToken()
travaux consiste en l'injection d'un champ de formulaire masqué nommé__RequestVerificationToken
dans la page ET il établit également un cookie dans le navigateur.Lorsque le formulaire est affiché en arrière, les deux sont comparés et si elles ne correspondent pas ou si le cookie est manquant, alors l'erreur est levée.
De sorte qu'il n'est pas question que Elmah les journaux que le formulaire est à envoyer
__RequestVerificationToken
. Elle le restera toujours, même dans le cas deCSRF
attaque, parce que c'est tout simplement le champ de formulaire masqué.Le message d'erreur sur l'autre main, dit le correspondant
COOKIE
n'est pas envoyé:Donc, fondamentalement quelqu'un/quelque chose est en relisant le post de formulaire sans en faire la demande initiale pour obtenir le cookie. Comme tels, ils ont le champ de formulaire masqué
__RequestVerificationToken
mais PAS le cookie afin de le vérifier.Donc il semble que les choses fonctionnent comme ils le devraient. Vérifiez vos journaux re: numéros d'IP, et de référents, etc. Vous pourriez être l'objet d'attaques ou peut-être faire quelque chose de bizarre ou buggy lors de la redirection de votre contenu du formulaire. Comme ci-dessus,
referrers
sont un bon endroit pour commencer pour ce genre d'erreur, en supposant que ce n'est pas usurpée.Également noter que selon les MDN
Si elle l'est, à l'occasion de chargement de la mémoire cache, alors vous pourriez vous retrouver avec un
POST
qui a l'ancienne page jeton mais pas le cookie.Donc, essayez :
En plus rism est une excellente réponse, une autre raison possible pour rencontrer cette erreur est parce que votre navigateur, ou plug-in de navigateur bloque les cookies.
Couru dans un problème similaire récemment.
Les anti-contrefaçon cookie en effet manquait, donc (comme d'autres ont pointé), soit à l'
Dans mon cas, c'était le serveur: je n'étais pas à l'aide de SSL sur l'environnement local, mais dans
web.config
j'ai eu la ligne suivante:Solution dans ce cas est de passer en SSL, ou de garder la valeur de la valeur 'False' pour l'environnement local.
Voudrez peut-être jeter un oeil à cette question. Les anti-contrefaçon cookie jeton et la forme du champ de jeton ne correspondent pas du MVC 4
Il est possible que ce soit un problème de délai d'attente. Fondamentalement, lorsque le délai d'attente se produit, le cookie n'est pas stocké en raison de l'iis de l'utilisateur que le site est en cours d'exécution en vertu de ne pas avoir les droits d'accès appropriés. Pour moi, j'ai changé le pool d'applications pour charger le profil utilisateur et cela semblait le fixer.