ajax中如何使用AntiForgeryToken防止CSRF攻击
发表于:2025-11-06 作者:千家信息网编辑
千家信息网最后更新 2025年11月06日,小编给大家分享一下ajax中如何使用AntiForgeryToken防止CSRF攻击,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解
千家信息网最后更新 2025年11月06日ajax中如何使用AntiForgeryToken防止CSRF攻击
小编给大家分享一下ajax中如何使用AntiForgeryToken防止CSRF攻击,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
经常看到在项目中ajax post数据到服务器不加防伪标记,造成CSRF攻击
在Asp.net Mvc里加入防伪标记很简单在表单中加入Html.AntiForgeryToken()即可。
Html.AntiForgeryToken()会生成一对加密的字符串,分别存放在Cookies 和 input 中。
我们在ajax post中也带上AntiForgeryToken
@model WebApplication1.Controllers.Person@{ ViewBag.Title = "Index";}Index
放在cookies里面的加密字符串
控制器中代码
using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Web;using System.Web.Helpers;using System.Web.Mvc;namespace WebApplication1.Controllers { public class HomeController : Controller { public ActionResult Index() { return View(); } [HttpPost] [MyValidateAntiForgeryToken] public ActionResult Index(Person p) { return Json(true, JsonRequestBehavior.AllowGet); } } public class Person { public string Name { get; set; } public int Age { get; set; } } public class MyValidateAntiForgeryToken : AuthorizeAttribute { public override void OnAuthorization(AuthorizationContext filterContext) { var request = filterContext.HttpContext.Request; if (request.HttpMethod == WebRequestMethods.Http.Post) { if (request.IsAjaxRequest()) { var antiForgeryCookie = request.Cookies[AntiForgeryConfig.CookieName]; var cookieValue = antiForgeryCookie != null ? antiForgeryCookie.Value : null; //从cookies 和 Headers 中 验证防伪标记 //这里可以加try-catch AntiForgery.Validate(cookieValue, request.Headers["__RequestVerificationToken"]); } else { new ValidateAntiForgeryTokenAttribute() .OnAuthorization(filterContext); } } } } }这里注释掉ajax中防伪标记在请求
$("#save").click(function () { $.ajax({ type: 'POST', url: '/Home/Index', cache: false, // headers: headers, data: { Name: "yangwen", Age: "1" }, success: function (data) { alert(data) }, error: function () { alert("Error") } });})默认返回500的状态码。
这里修改ajax中的防伪标记
$(function () { //var token = $('[name=__RequestVerificationToken]'); //获取防伪标记 var token = $('@Html.AntiForgeryToken()').val(); var headers = {}; //防伪标记放入headers //也可以将防伪标记放入data headers["__RequestVerificationToken"] = token+11111111111111111111111111111111111; $("#save").click(function () { $.ajax({ type: 'POST', url: '/Home/Index', cache: false, headers: headers, data: { Name: "yangwen", Age: "1" }, success: function (data) { alert(data) }, error: function () { alert("Error") } }); })})也是500的状态码。
以上是"ajax中如何使用AntiForgeryToken防止CSRF攻击"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
标记
防伪
攻击
篇文章
内容
字符
字符串
状态
加密
不怎么
大部分
控制器
数据
更多
服务器
注释
知识
行业
表单
资讯
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
没有输入法软件开发
java软件开发经常加班
长沙戴尔服务器
百度公司的软件开发工资
页面链接不到数据库
深圳市互联港湾网络技术公司
网络安全侧防例题
网络安全第一议题
石化行业服务器安全加固系统
用友软件仓库档案数据库表
uci数据库中鲍鱼
重庆远光软件开发公司
山东梓格网络技术有限公司
建立食品标准数据库
客户端登录服务器怎么登
方舟服务器招收管理
淘宝服务器有多少台
重庆软件开发定制怎么收费
最有前景的软件开发类股票
百卓网络技术有限公司待遇怎么样
深圳多点互联网科技
零基础可以报软件开发专业吗
服务器配置管理方案
中卫app软件开发制作
宝山区好的软件开发推荐
app违反网络安全法
易语言数据库字段信息
聊天软件开发需要多少
上海软件开发科技公司
外国服务器有多强