Tag: antiforgerytoken

如何设置jQuery Ajax调用以在Asp.Net MVC中的thair请求头中全局注入AntiForgeryToken

我在Asp.net MVC 5项目上工作,并且知道有两种方法可以在ajax调用AntiForgeryToken传递给服务器: 把它放在Header 把它放在Data 我喜欢在request header放入AntiForgeryToken ,我的代码在客户端和服务器端都很好用。 我跟着这篇文章 。 我把AntiForgeryToken放在每个$.ajax调用header ,它运行良好 但 现在我决定编写新代码,将AntiForgeryToken添加到全局页面中具有POST类型的所有Ajax调用,并删除每个$.ajax代码块中的标头设置。 然后我写了这些代码来实现我的决定,当我在我的页面中有一个表单时, 它也很有效 (我没有在诸如页面中的多个表单等集合的情况下测试它…): var antiForgerytoken = $(‘input[name=”__RequestVerificationToken”]’).val(); $.ajaxPrefilter(function (options, originalOptions, jqXhr) { if (options.type.toUpperCase() == “POST”) { jqXhr.setRequestHeader(“__RequestVerificationToken”, antiForgerytoken); } }); 我的问题: 这个决定有任何安全性或不恰当的副作用吗? 当我在我的页面中有多个表单 ,每个表单由不同的局部视图创建并将通过不同控制器中的不同操作处理时,我应该在每个表单中找到相关的AntiForgeryToken并将其注入到与该表单相关的所有Ajax调用中吗? 或者只是上面的代码就足够了? 也许这个问题的基础是写在这里的另一个问题, @ DarinDimitrov回答它包括这个描述: ASP.NET MVC将简单地为所有表单重用相同的值,因此它不需要知道发送请求的表单以validation它 这个规则是绝对的吗? 你知道参考吗? 我在@DarinDimitrov回答的评论中看到了一些相反的观点 如果我应该分别对每个表单AntiForgeryToken行为,我应该如何更改上面的代码以全局设置Ajax头中的AntiForgeryToken以使用在MVC页面中呈现的所有表单?

MVC 3 AJAX和

我之前问了一个关于这个问题的问题 ,得到了一个有趣的答案让我开始了,并提出更多问题。 所以这是我的旅程中的下一个问题,即找出AJAXpost的内部工作方式以及相当恼人的ValidateAntiForgeryTokenAttribute 。 我有一个_layout.cshtml,这是所有脚本好东西现在所在的位置。 我有一个登录页面,它呈现三个部分,一个用于OpenID登录,这只是一个普通的@using(Html.BeginForm()) {} ,一个用于本地登录,另一个用于基本注册。 登录部分和寄存器部分都使用ViewModels和Ajax.BeginForm 请注意我正在使用@using Ajax.BeginForm并抓取data-ajax-update attr来更新成功元素 _layout.cshtml中的脚本: $(document).ready(function () { $(‘input[type=submit]’).live(“click”, function (event) { event.preventDefault(); var _allFormData = $(this).parents().find(‘form’); var _currentForm = $(this).closest(‘form’); var _updateElement = $(_currentForm).attr(“data-ajax-update”); $.ajax({ type: “POST”, url: $(_currentForm).attr(‘action’), data: $(_allFormData).serialize(), success: function (data) { $(_updateElement).html(data); } }); return true; }); }); _layout.cshtml中的表单元素 控制器中的动作方法: public ActionResult […]

所需的防伪cookie“__RequestVerificationToken”不存在

我的网站每天大约20次提出这个exception,通常表单工作正常,但有些情况发生这个问题,我不知道为什么这么随机。 这是elmah记录的exception 500 HttpAntiForgery所需的防伪cookie __RequestVerificationToken“不存在。 但它正在发送由elmah在XML日志中显示的令牌的forms 这是我在控制器上的方法,它使用数据属性来检查令牌是否有效 [HttpPost] [ValidateAntiForgeryToken] public async Task Send(SMSModel model) { // my code goes here } 这是我在视图上的表单 @using (Html.BeginForm(“Send”, “SMS”, FormMethod.Post, new { @class = “form-sms”, autocomplete = “off” })) { @Html.AntiForgeryToken() +53 @Html.TextBoxFor(m => m.toPhone, new { @class = “form-control”, placeholder = “teléfono”, required = “required”, type = “tel”, […]

在一个页面中以两种不同的forms使用多个@ Html.AntiForgeryToken()是否可能/正确?

我一直面临着@Html.AntiForgeryToken()严重问题。 我有一个注册控制器,它有一个创建视图来创建/注册新成员。 出于这个原因,我使用@Html.AntiForgeryToken()而不使用我的主提交表单中的任何SALT。 现在我想validation用户名是否已存在于我的用户名文本框的blur事件的数据库中。 为了validation,我编写了一个名为“Validation”的新控制器,并使用常量validationSALT编写了一个方法: [HttpPost] [ValidateAntiForgeryToken(Salt = @ApplicationEnvironment.SALT)] public ActionResult username(string log) { try { if (log == null || log.Length < 3) return Json(log, JsonRequestBehavior.AllowGet); var member = Membership.GetUser(log); if (member == null) { //string userPattern = @"^([a-zA-Z])[a-zA-Z_-]*[\w_-]*[\S]$|^([a-zA-Z])[0-9_-]*[\S]$|^[a-zA-Z]*[\S]$"; string userPattern = "[A-Za-z][A-Za-z0-9._]{3,80}"; if (Regex.IsMatch(log, userPattern)) return Json(log, JsonRequestBehavior.AllowGet); } } catch (Exception ex) […]