asp.net – 使用MVC2的AJAX请求中的CSRF保护
|
我正在构建的页面在很大程度上取决于 AJAX.基本上,只有一个“页面”,每个数据传输都通过AJAX处理.由于浏览器端的过度优化缓存导致奇怪的问题(数据未重新加载),我必须使用POST执行所有请求(也读取) – 强制重新加载. 现在我想阻止页面反对CSRF.使用表单提交,使用Html.AntiForgeryToken()可以很好地工作,但在AJAX请求中,我想我必须手动附加令牌?有没有开箱即用的东西? 我目前的尝试看起来像这样: 我想重用现有的魔法.但是,HtmlHelper.GetAntiForgeryTokenAndSetCookie是私有的,我不想在MVC中乱砍.另一种选择是写一个类似的扩展名 public static string PlainAntiForgeryToken(this HtmlHelper helper)
{
// extract the actual field value from the hidden input
return helper.AntiForgeryToken().DoSomeHackyStringActions();
}
这有点hacky并留下未解决的更大问题:如何验证该令牌?默认验证实现是内部的,并且使用表单字段进行硬编码.我试着写一个稍微修改过的ValidateAntiForgeryTokenAttribute,但是它使用了一个私有的AntiForgeryDataSerializer,我真的不想复制它. 在这一点上,似乎更容易想出一个自己开发的解决方案,但这确实是重复的代码. 有什么建议如何以聪明的方式做到这一点?我错过了一些完全明显的东西吗 解决方法您可以使用传统的Html.AntiForgeryToken()帮助程序在页面的某个位置(不一定在表单内)生成隐藏字段,并将其包含在ajax请求中:var token = $('input[name=__RequestVerificationToken]').val();
$.post(
'/SomeAction',{ '__RequestVerificationToken': token },function() {
alert('Account Deleted.');
}
);
要在服务器端验证它: [AcceptVerbs(HttpVerbs.Post)]
[ValidateAntiForgeryToken]
public ActionResult SomeAction()
{
return View();
}
如果您的页面上有多个令牌,则可能需要指定要包含的令牌.由于现有的帮助器生成具有相同名称的隐藏字段,因此很难创建一个好的选择器,因此您可以将它们放在跨度中: <span id="t1"><%= Html.AntiForgeryToken() %></span> <span id="t2"><%= Html.AntiForgeryToken() %></span> 然后选择相应的令牌: var token = $('#t1 input[name=__RequestVerificationToken]').val(); (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – MVC 4提供的反伪造令牌是为用户“”而是当前
- asp.net-mvc – Web API可空的必需属性需要DataMember属性
- asp.net核心 – ASP.NET核心MVC查看组件
- asp.net-mvc-3 – ASP.NET MVC3 WebGrid – 自定义,服务器端
- asp.net-mvc-3 – 全球化在ASP.Net MVC 3
- asp.net-mvc – 我什么时候应该在ASP.NET MVC中创建一个新的
- asp.net-mvc-3 – 在ASP.NET MVC3中的自定义授权属性中使用
- ASP.NET会话状态和多个工作进程
- asp.net-mvc – 对HTTP POST请求的正确响应是什么?
- asp.net – Telerik RadGrid – 如何默认编辑模式?
- LoginView中的ASP.NET LoginStatus不会触发Loggi
- 如何在asp.net中的gridview中添加带有按钮的列?
- 数组 – 发布字符串数组
- Asp.net MVC Razor – 自定义javascript里面的if
- 在asp.net中使用绑定表达式时,如何连接文本?
- ASP.NET身份验证在自定义机票上滑动到期时间
- asp.net-mvc – 在MVC3中的错误 – 请求永远不会
- asp.net-mvc – 让RouteDebugger在404页面上工作
- asp.net – 如何单元测试使用HostingEnvironment
- ASP.NET ListView – 渲染THEAD / TBODY标签
