架构师_程序员_码农网

查看: 4639|回复: 3

[ASP.NET] mvc ajax带上AntiForgeryToken防止CSRF攻击

[复制链接]
发表于 2017-11-2 10:06:29 | 显示全部楼层
经常看到在项目中ajax post数据到服务器不加防伪标记,造成CSRF攻击,在Asp.net Mvc里加入防伪标记很简单在表单中加入Html.AntiForgeryToken()即可。
Html.AntiForgeryToken()会生成一对加密的字符串,分别存放在Cookies 和 input 中。我们在ajax post中也带上AntiForgeryToken
MVC中的Html.AntiForgeryToken()是用来防止跨站请求伪造(CSRF:Cross-site request forgery)攻击的一个措施,它跟XSS(XSS又叫CSS:Cross-Site-Script),攻击不同,XSS一般是利用站内信任的用户在网 站内插入恶意的脚本代码进行攻击,而CSRF则是伪造成受信任用户对网站进行攻击。
首先,我们视图代码如下:

运行起来,生成的html代码如下:



我们点击test按钮,去请求测试一下,看下是否带上了防伪造的cookie,如下图:

QQ截图20171102100206.jpg

控制器中代码如下:

我们需要每个控制器里面里面加上ValidateAntiForgeryToken特性,如果用户没有带上AntiForgeryToken,我们可以返回给用户一个友好的提示,参考如下:







上一篇:asp.net mvc BindAttribute绑定特性
下一篇:CMMI与Agile敏捷开发比较之一:两者的本质区别
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2017-11-2 11:05:37 | 显示全部楼层
上面方法,必须自定义特性,不能使用默认的ValidateAntiForgeryToken特性

默认的特性是在form表单里面去取值,然后判断的

QQ截图20171102110256.jpg

自己用jQuery封装了一个post方法,带有防伪造验证的,代码如下:



码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 2017-11-2 11:17:36 | 显示全部楼层
IsAjaxRequest判断是否是ajax请求

本质上IsAjaxRequest()是判断header里面有没有X-Requested-With字段以及它是否是XMLHttpRequest

看文档没用,要看源代码。
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
 楼主| 发表于 5 天前 | 显示全部楼层
ASP.NET CSRF 攻击Ajax请求封装
https://www.itsvse.com/thread-8077-1-1.html
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2021-2-25 18:52

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表