可能我们大多数人做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攻击的更多相关文章

  1. ASP.NET MVC 防止CSRF攻击

    简介 MVC中的Html.AntiForgeryToken()是用来防止跨站请求伪造(CSRF:Cross-site request forgery)攻击的一个措施,它跟XSS(XSS又叫CSS:Cr ...

  2. asp.netcore mvc 防CSRF攻击,原理介绍+代码演示+详细讲解

    一.CSRF介绍 1.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session ridin ...

  3. Spring mvc拦截器防御CSRF攻击

    CSRF(具体参考百度百科) CSRF(Cross-site request forgery跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSR ...

  4. MVC Html.AntiForgeryToken() 防止CSRF攻击

    转自:http://blog.csdn.net/cpytiger/article/details/8781457 一.MVC中的Html.AntiForgeryToken()是用来防止跨站请求伪造(C ...

  5. MVC 应用免受 CSRF攻击

    保护ASP.NET 应用免受 CSRF 攻击   CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack ...

  6. 转:MVC Html.AntiForgeryToken() 防止CSRF攻击

    (一)MVC Html.AntiForgeryToken() 防止CSRF攻击 MVC中的Html.AntiForgeryToken()是用来防止跨站请求伪造(CSRF:Cross-site requ ...

  7. .NET MVC中的防CSRF攻击

    一.CSRF是什么? CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSR ...

  8. Asp.net MVC 如何防止CSRF攻击

    什么是CSRF攻击? CSRF(Cross-site request forgery跨站请求伪造,也被称成为"one click attack"或者session riding,通 ...

  9. [转]MVC Html.AntiForgeryToken() 防止CSRF攻击

    [转]MVC Html.AntiForgeryToken() 防止CSRF攻击 本文转自:http://blog.csdn.net/luck901229/article/details/8261640 ...

随机推荐

  1. Centos7 通配符HTTPS证书申请 实测 笔记

    环境: 免费通配符HTTPS证书网址: https://letsencrypt.org/ 1.下载证书申请工具 [root@centos ~]# mkdir /opt/letsencrypt -p [ ...

  2. SpringBoot 中 @RestController 和 @Controller 的区别

    1 - 在springboot中,@RestController 相当于 @Controller + @ResponseBody;2 - 即在Controller类中,若想返回jsp或html页面,则 ...

  3. 使用Bandwagon服务器ftp解决git clone速度慢的问题

    写在前面 git clone速度往往很慢,我们可以先在身处美国的服务器上git clone,然后把文件用ftp传回来即可. 开始 我们以opencv为例 git clone https://githu ...

  4. python+SQLAlchemy+爬虫

    python+SQLAlchemy+爬虫 前面分享了SQLAlchemy的知识,这次我共享一下学习用python开发爬虫再把爬出来的数据放到用SQLAlchemy的数据库上面的知识,当然我这个是带测试 ...

  5. Three.js学习笔记01

    1.四大组件: 场景:场景是所有物体的容器 var scene = new THREE.Scene(); 相机: 正投影相机:远处的和近处的是一样大 THREE.OrthographicCamera ...

  6. Portainer介绍

    Portainer是Docker的图形化管理工具,提供状态显示面板.应用模板快速部署.容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作).事件日志显示.容器控制台操作.Swarm集群和服 ...

  7. [Swift]LeetCode119. 杨辉三角 II | Pascal's Triangle II

    Given a non-negative index k where k ≤ 33, return the kth index row of the Pascal's triangle. Note t ...

  8. [Swift]LeetCode1021. 删除最外层的括号 | Remove Outermost Parentheses

    A valid parentheses string is either empty (""), "(" + A + ")", or A + ...

  9. Redux源码学习笔记

    https://github.com/reduxjs/redux 版本 4.0.0 先了解一下redux是怎么用的,此处摘抄自阮一峰老师的<Redux 入门教程> // Web 应用是一个 ...

  10. CentOS6.5中部署java web环境

    原来在linux中部署java web环境,没有做好总结,这次在部署的过程中,将部署的过程做了记录,希望对大家有帮助.主要内容包括CentOS安装以后的网络设置,系统自带jdk的卸载,新版本jdk的安 ...