首页 > 代码库 > MVC 防止CSRF -- AntiForgeryToken
MVC 防止CSRF -- AntiForgeryToken
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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。