码迷,mamicode.com
首页 > Web开发 > 详细

MVC 防止CSRF -- AntiForgeryToken

时间:2016-11-04 20:21:48      阅读:364      评论:0      收藏:0      [点我收藏+]

标签:validate   pre   for   post   div   form   mvc   ati   mit   

1. 标配版 

Home.cshtml

<form method=‘POST‘ action=‘Home/Subscribe‘ >
    @Html.AntiForgeryToken()
<input type="email" />
<input type="submit" value="Subscribe" /> </form>

HomeController

1 [HttpPost]
2 [ValidateAntiForgeryToken]
4 public ActionResult Subscribe(string email)
5 {
6 }

form method =‘POST‘ @Html.AntiForgeryToken() [HttpPost] [ValidateAntiForgeryToken]  缺一不可

原理: 

@Html.AntiForgeryToken() 会在页面生成如下name=‘__RequestVerificationToken‘ 的input value 是随机字符串,每次刷新页面会不一样

 

1 <input name="__RequestVerificationToken" value="cMNPTS8iRvJuznErspwm+G/vd1Iec0/egpX4j8trlQtvWE9RMiifCd3/eNUzLCoi+m/w4qI2HbqkvHV7Js8WBeFbl3XWVbva4RjE2eSQHu+8xx5391x1W86ZbtSFdZp98h7cV3Dp/9erZjy5p2LO4LKvGEyGW3Dz73YTiNJSTwU=" type="hidden">

 

 

form POST提交会将表单内的数据加入request body , 所以 __RequestVerificationToken 也会在request 中。 同时request 里会有一个 __RequestVerificationToken_lw_ 的cookie, cookie的值是经过加密的,所以会跟页面上取到的值不一样。到了Server 端,[HttpPost]接收POST数据,[ValidateAntiForgeryToken] check request __RequestVerificationToken  和cookie 的值是否一致。如果一致执行Action, 不一致页面提示需要AntiforgeryToken.

 

MVC 防止CSRF -- AntiForgeryToken

标签:validate   pre   for   post   div   form   mvc   ati   mit   

原文地址:http://www.cnblogs.com/pangxiaohai/p/6031263.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!