代码改变世界

asp.net mvc 在ajax中带上 AntiForgeryToken

2015-07-09 10:13  jdilt  阅读(396)  评论(0编辑  收藏  举报

为了防止跨站点的请求伪造,asp.net mvc引入了AntiForgeryToken这个东西。
原理简单说来就是每个session开始的时候发布一个token,之后的每次请求都会带上这个token,然后服务器端对其进行校验。

使用方法也很简单

  1. 在html表单里加入:
    @Html.AntiForgeryToken()
    对应的html代码为
<input name="__RequestVerificationToken" type="hidden" value="L5xNWJZ-rz5BowiAGZzA-O948cfJlTQpaEwlXppJEGWI8eBn3zvL_MIWZ7roMQE2iA86KRyvJEhnXX2DAVZij03coUZs09clOVhMBnBzzU81">
  1. 在对应的action上加上 [ValidateAntiForgeryToken]

如何让ajax请求也能通过服务器端的token验证,自然是把token作为参数加到请求里:

  1. 增加一个表单
<%-- used for ajax in AddAntiForgeryToken() --%>
<form id="__AjaxAntiForgeryForm" action="#" method="post"><%= Html.AntiForgeryToken()%></form> 
  1. 增加一个用于获取页面中token的方法
AddAntiForgeryToken = function(data) {
    data.__RequestVerificationToken = $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val();
    return data;
};
  1. 在ajax请求里把token带上
$.ajax({
    type: "post",
    dataType: "html",
    url: $(this).attr("rel"),
    data: AddAntiForgeryToken({ id: parseInt($(this).attr("title")) }),
    success: function (response) {
        // ....
    }
});

stackoverflow原文