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 ...
随机推荐
- git 本地同步分支数,删除远程已经删除掉的多余分支
git remote show orgin (展示当前本地分支和远程上的分支差异,多余分支后会被标注 use 'git remote prune' to remove.) git remote pr ...
- RabbitMQ 消息顺序、消息幂等、消息重复、消息事务、集群
1. 消息顺序 场景:比如下单操作,下单成功之后,会发布创建订单和扣减库存消息,但扣减库存消息执行会先于创建订单消息,也就说前者执行成功之后,才能执行后者. 不保证完全按照顺序消费,在 MQ 层面支持 ...
- 【RL-TCPnet网络教程】第37章 RL-TCPnet之FTP客户端
第37章 RL-TCPnet之FTP客户端 本章节为大家讲解RL-TCPnet的FTP客户端应用,学习本章节前,务必要优先学习第35章的FTP基础知识.有了这些基础知识之后,再搞本章节会有事 ...
- Go语言数组和切片的原理
目录 数组 创建 访问和赋值 切片 结构 初始化 访问 追加 拷贝 总结 数组和切片是 Go 语言中常见的数据结构,很多刚刚使用 Go 的开发者往往会混淆这两个概念,数组作为最常见的集合在编程语言中是 ...
- [Swift]LeetCode213. 打家劫舍 II | House Robber II
You are a professional robber planning to rob houses along a street. Each house has a certain amount ...
- [Swift]LeetCode502. IPO(首次公开募股) | Initial Public Offerings
Suppose LeetCode will start its IPO soon. In order to sell a good price of its shares to Venture Cap ...
- [SQL]LeetCode577.员工奖金 | Employee Bonus
Select all employee's name and bonus whose bonus is < 1000. Table:Employee +-------+--------+---- ...
- [Swift]LeetCode956. 最高的广告牌 | Tallest Billboard
You are installing a billboard and want it to have the largest height. The billboard will have two ...
- [Swift]LeetCode996. 正方形数组的数目 | Number of Squareful Arrays
Given an array A of non-negative integers, the array is squareful if for every pair of adjacent elem ...
- 解决git pull出现: Your local changes to the following files would be overwritten by merge: ...的问题
今天在服务器上git pull是出现以下错误: error: Your local changes to the following files would be overwritten by mer ...