为了防止跨站点的请求伪造,asp.net mvc引入了AntiForgeryToken这个东西。
原理简单说来就是每个session开始的时候发布一个token,之后的每次请求都会带上这个token,然后服务器端对其进行校验。
使用方法也很简单
- 在html表单里加入:
@Html.AntiForgeryToken()
对应的html代码为
<input name="__RequestVerificationToken" type="hidden" value="L5xNWJZ-rz5BowiAGZzA-O948cfJlTQpaEwlXppJEGWI8eBn3zvL_MIWZ7roMQE2iA86KRyvJEhnXX2DAVZij03coUZs09clOVhMBnBzzU81">
- 在对应的action上加上 [ValidateAntiForgeryToken]
如何让ajax请求也能通过服务器端的token验证,自然是把token作为参数加到请求里:
- 增加一个表单
<%-- used for ajax in AddAntiForgeryToken() --%>
<form id="__AjaxAntiForgeryForm" action="#" method="post"><%= Html.AntiForgeryToken()%></form>
- 增加一个用于获取页面中token的方法
AddAntiForgeryToken = function(data) {
data.__RequestVerificationToken = $('#__AjaxAntiForgeryForm input[name=__RequestVerificationToken]').val();
return data;
};
- 在ajax请求里把token带上
$.ajax({
type: "post",
dataType: "html",
url: $(this).attr("rel"),
data: AddAntiForgeryToken({ id: parseInt($(this).attr("title")) }),
success: function (response) {
// ....
}
});