1、在Html表单里面使用了@Html.AntiForgeryToken()就可以阻止CSRF攻击。
2、相应的我们要在Controller中也要加入[ValidateAntiForgeryToken]过滤特性。该特性表示检测服务器请求是否被篡改。注意:该特性只能用于post请求,get请求无效。
3、至于JS,我们的项目中引用的是<script src="@Url.Content("~/Content/js/jqueryToken-1.4.2.js")" type="text/JavaScript"></script>
在JS时要使用: $.ajaxAntiForgery才行,
如:
$.ajaxAntiForgery({
type: "post",
data: { GroupName: $("#GroupName").val(), GroupPhones: $("#GroupPhones").val() },
dataType: "json",
url: "/Event/Mass/AddGroup",
success: function (data) {
if (data) {
alert("添加成功 ");
$.unblockUI();
}
else {
alert("添加失败 ");
}
}
})
注:对数据进行增删改时要防止csrf攻击!
另外一种方式
public class HomeController : Controller {public ActionResult Index(){return View();}[HttpPost][ValidateAntiForgeryToken]public ActionResult Index(string someValue){return Json(new { someValue = someValue });} }
@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "__AjaxAntiForgeryForm" })) {@Html.AntiForgeryToken() }<div id="myDiv" data-url="@Url.Action("Index", "Home")">Click me to send an AJAX request to a controller actiondecorated with the [ValidateAntiForgeryToken] attribute </div><script type="text/javascript">$('#myDiv').submit(function () {var form = $('#__AjaxAntiForgeryForm');var token = $('input[name="__RequestVerificationToken"]', form).val();$.ajax({url: $(this).data('url'),type: 'POST',data: { __RequestVerificationToken: token, someValue: 'some value' },success: function (result) {alert(result.someValue);}});return false;}); </script>