MVC防止CSRF攻击
可能我们大多数人做web的时候不会太注意这个问题,但是这是一个很重要的一个点。我们写代码写业务的时候也应该从各方面多思考。
首先就是先简单介绍下什么是CSRF
CSRF 全程是 Cross-site request forgery 中文意思就是跨站请求伪造。和跨站脚本XSS不同,XSS的特点是利用站内受信任的用户,将代码植入到提供给其它用户使用的页面中,但是CSRF的特点是利用你的身份去做一些服务端认为合法的请求。可能我们很多人都会出现qq空间被莫名的发好多广告信息,他的流程就是 比如说我们登陆了一个网站 ,一些认证信息保存再cookie中,因为session也就是根据cookie的机制来实现的,当别人拿到这些cookie的时候 就可以利用cookie来做服务端认为合法的事情,发广告帖什么的。
防范方式也有很多 在MVC中可以通过ValidateAntiForgeryToken这个特性来做到这一点。同时 这个特性只针对post请求,这个特性的作用就是阻止伪造请求。代码如下:
[HttpPost]
[ValidateInput(false)]
[ValidateAntiForgeryToken]
public ActionResult Login(string name,string pwd)
{
if (name==pwd)
{
return RedirectToAction("Index");
}
ModelState.AddModelError("", "用户名密码错误!");
return View();
}
 这时候我们构造一个请求,表单提交,就会抛出这样的错误信息
其实到这一步我们的初步目标就达到了,在本站点中,我们在提交表单的时候,需要使用到Html.AntiForgeryToken()
这个玩意写在我们的form标签里,他的作用就是在form标签里面加一个name为__RequestVerificationToken的hidden标签,这个标签的value就是一串被加密的字符串。
加密器是MachineKey。同时这玩意还生成了一个名为__RequestVerificationToken的cookie。
  @using (Html.BeginForm("Login", "Home", FormMethod.Post))
        {
            @Html.AntiForgeryToken()
            @Html.ValidationSummary(true)
            <div class="form-group">
                <label class="label-danger">用户名:</label>
                <input type="text" name="name" />
            </div>
            <div class="form-group">
                <label class="label-danger">密码:</label>
                <input type="text" name="pwd" />
            </div>
            <div class="form-group">
                <button type="submit" class="btn-primary">登陆</button>
            </div>
        }
这时候我们就可以构造合法且相对安全的请求了。
总结一下 csrf 就是别人利用你的身份进行恶意操作。
而我们在MVC中的应对之道就是别form表单里面使用 @Html.AntiForgeryToken()
这玩意的作用就是通过MachineKey加密从而生成了一个hidden标签以及写入cookie
在Controller里面,Action加上 [ValidateAntiForgeryToken]特性从而验证。
流程就是如此。
MVC防止CSRF攻击的更多相关文章
- ASP.NET MVC 防止CSRF攻击
		简介 MVC中的Html.AntiForgeryToken()是用来防止跨站请求伪造(CSRF:Cross-site request forgery)攻击的一个措施,它跟XSS(XSS又叫CSS:Cr ... 
- asp.netcore mvc 防CSRF攻击,原理介绍+代码演示+详细讲解
		一.CSRF介绍 1.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session ridin ... 
- Spring mvc拦截器防御CSRF攻击
		CSRF(具体参考百度百科) CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSR ... 
- MVC Html.AntiForgeryToken() 防止CSRF攻击
		转自:http://blog.csdn.net/cpytiger/article/details/8781457 一.MVC中的Html.AntiForgeryToken()是用来防止跨站请求伪造(C ... 
- MVC 应用免受 CSRF攻击
		保护ASP.NET 应用免受 CSRF 攻击 CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack ... 
- 转:MVC Html.AntiForgeryToken() 防止CSRF攻击
		(一)MVC Html.AntiForgeryToken() 防止CSRF攻击 MVC中的Html.AntiForgeryToken()是用来防止跨站请求伪造(CSRF:Cross-site requ ... 
- .NET MVC中的防CSRF攻击
		一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSR ... 
- Asp.net MVC 如何防止CSRF攻击
		什么是CSRF攻击? CSRF(Cross-site request forgery跨站请求伪造,也被称成为"one click attack"或者session riding,通 ... 
- [转]MVC Html.AntiForgeryToken() 防止CSRF攻击
		[转]MVC Html.AntiForgeryToken() 防止CSRF攻击 本文转自:http://blog.csdn.net/luck901229/article/details/8261640 ... 
随机推荐
- (转)基因芯片数据GO和KEGG功能分析
			随着人类基因组计划(Human Genome Project)即全部核苷酸测序的即将完成,人类基因组研究的重心逐渐进入后基因组时代(Postgenome Era),向基因的功能及基因的多样性倾斜.通过 ... 
- 关于 js中replace 特殊符号 ‘.’ 的问题
			问题: 字符串转数组,但是分割点在‘.’ ,需要保留每个后缀的 ‘.’ + 类型 解决: let videoType = '.avi.rmvb.rm.asf.divx.mpg.mpeg.mpe.wmv ... 
- SSIS - 11.For循环容器
			一.For循环容器中的3个循环变量 For循环容器,类似于编程语言中的For,用于重复执行容器内的任务,直到条件返回为False.与编程语言类似,For循环容器也需要定义以下3种循环属性: 注: 必须 ... 
- ubuntu 16.04卸载不必要默认安装软件
			两个办法,一个在ubuntu软件里一个一个删,明显的windows下做法. 还有一个通过终端来删除.ctrl+alt+t打开终端. 1.卸载libreoffices(要删一起删了,然后去装office ... 
- QEMU KVM Libvirt手册(6) – Network Block Device
			网络块设备是通过NBD Server将虚拟块设备通过TCP/IP export出来,可以远程访问. NBD Server通常是qemu-nbd 可以提供unix socket qemu-nbd -t ... 
- MQTT在react-native中的运行
			mqtt 1.什么是mqtt? MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式 ... 
- [Swift]LeetCode159.具有最多两个不同字符的最长子串 $ Longest Substring with At Most Two Distinct Characters
			Given a string S, find the length of the longest substring T that contains at most two distinct char ... 
- [Swift]LeetCode936. 戳印序列 | Stamping The Sequence
			You want to form a target string of lowercase letters. At the beginning, your sequence is target.len ... 
- Redis  设计与实现 (五)--多机数据库的实现
			多机数据库的实现 一.复制 slaveof 主服务器ip地址.形成主从关系. 1.同步 从向主服务器发送sync命令. 主服务器收到sync命令执行bgsave,生成rdb文件,缓冲区同时记录从 ... 
- Spring MVC知识
			f-sm-1. 讲下SpringMvc和Struts1,Struts2的比较的优势 性能上Struts1>SpringMvc>Struts2 开发速度上SpringMvc和Struts2差 ... 
