mvc html.antiforgerytoken,MVC Html.AntiForgeryToken() 防止CSRF***

MVC中的Html.AntiForgeryToken()是用来防止跨站请求伪造(CSRF:Cross-site request forgery)***的一个措施,它跟XSS(XSS又叫CSS:Cross-Site-Script),***不同,XSS一般是利用站内信任的用户在网站内插入恶意的脚本代码进行***,而CSRF则是伪造成受信任用户对网站进行***。

举个简单例子,譬如整个系统的公告在网站首页显示,而这个公告是从后台提交的,我用最简单的写法:

网站后台(Home/Index页面)设置首页公告内容,提交到HomeController的Text Action

@using (Html.BeginForm("Text","Home",FormMethod.Post))

{

@:网站公告:

}

HomeController的Text Action

[HttpPost]

public ActionResult Text()

{

ViewBag.Notice = Request.Form["Notice"].ToString();

return View();

}

填写完公告,提交,显示

%E5%90%8E%E5%8F%B0.jpg

此时提供给了跨站***的漏洞,CSRF一般依赖几个条件

(1)***者了解受害者所在的站点

(2)***者的目标站点具有持久化授权cookie或者受害者具有当前会话cookie

(3)目标站点没有对用户在网站行为的第二授权此时

现假设我知道我要***的网站的地址,譬如是http://localhost:6060/Home/Text,且也满足2,3的情况。

于是我新建一个AntiForgeryText.html文件,内容如下:

copycode.gif

copycode.gif

在这个html中加了一个隐藏的字段,Name和Id和网站要接收的参数名一样。

我点击了“黑掉这个网站”,呈现如下

%E6%94%BB%E5%87%BB.jpg

这个就是利用了漏洞把首页的公告给改了,这就是一个简单的跨站***的例子。

MVC中通过在页面上使用 Html.AntiForgeryToken()配合在对应的Action上增加[ValidateAntiForgeryToken]特性来防止跨站***。

把上面的代码改成

@using (Html.BeginForm("Text","Home",FormMethod.Post))

{

@Html.AntiForgeryToken()

@:网站公告:

}

对应的Action

copycode.gif

[HttpPost]

[ValidateAntiForgeryToken]

public ActionResult Text()

{

ViewBag.Notice = Request.Form["Notice"].ToString();

return View();

}

copycode.gif

这样子我在AntiForgeryText.html中点"黑掉这个网站",就会出现

%E9%98%B2%E6%AD%A2%E8%B7%A8%E7%AB%99%E4%BC%AA%E9%80%A0.jpg

这样就防止了跨站***。

页面上的Html.AntiForgeryToken()会给访问者一个默认名为__RequestVerificationToken的cookie

为了验证一个来自form post,还需要在目标action上增加[ValidateAntiForgeryToken]特性,它是一个验证过滤器,

它主要检查

(1)请求的是否包含一个约定的AntiForgery名的cookie

(2)请求是否有一个Request.Form["约定的AntiForgery名"],约定的AntiForgery名的cookie和Request.Form值是否匹配

其中主要涉及到System.Web.WebPages.dll中的静态类AntiForgery

Html.AntiForgeryToken()调用了AntiForgery静态类的GetHtml方法,它产生一个随机值然后分别存储到客户端cookie和页面的hidden field中,

(2)页面上的hiddenfield

其中cookie的key的名字和页面hidden field的名字是一样的,默认都是"__RequestVerificationToken",如果有提供ApplicationPath的话,那就是由"__RequestVerificationToken"和经过处理后的ApplicationPath组成。

Controller端则通过在Action上增加[ValidateAntiForgeryToken]特性来验证,

ValidateAntiForgeryTokenAttribute继承了FilterAttribute和IAuthorizationFilter,通过传递匿名委托方法,

委托调用AntiForgery类的Validate方法来实现验证。

Validate方法中主要验证Request.Cookies[antiForgeryTokenName]和两个的值是否相同,

如果页面没有,或者两个值不相等,就会抛出异常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/328925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(一)-- 起步

一、安装Visual Studio Code 安装文件下载地址:VS Code,当前最新版本是1.3。 推荐安装最新版,因为附带Debug插件,支持在vs code上进行断点调试。 二、安装.Net Core 1.0 SDK 安装文件下载地址:.Net Core SDK 三、创建一…

计算机应用基础期中上机考试,期中考试计算机应用基础试卷

中职17计算机1期中考试计算机应用基础试卷一、选择题1.在Excel2010工作簿中,至少应含有的工作表个数是()。A.0B.1C.2D.32.在Excel2010公式中,地址引用E$6是()A.引用绝对地址B.相对地址C.混合地址D.都不是3.在Excel2010默认建立的工作簿中,用户对工作表()。A.可以增加或删除B.不…

java实现打印直角三角形

package cn.jbit.nestedloops; import java.util.Scanner; /*** 输入行数打印直角三角形*/ public class RTriAngle {public static void main(String[] args) {int rows 0; //三角形行数System.out.print("请输入直角三角形的行数:");Scanner input ne…

ASP.NET Core Linux下为 dotnet 创建守护进程(必备知识)

前言 在上篇文章中《ASP.NET Core Docker部署》中介绍了如何在 Docker 容器中部署我们的 asp.net core 应用程序,本篇主要是怎么样为我们在 Linux 或者 macOs 中部署的 dotnet 程序创建一个守护进程,来保证我们的程序在异常或者是电脑重启的时候仍然能够…

测试OOM异常

转载自 测试OOM异常一、Java堆溢出内存溢出和内存泄露内存溢出:指程序运行过程中无法申请到足够的内存而导致的一种错误。内存溢出通常发生于OLD段或Perm段垃圾回收后,仍然无内存空间容纳新的Java对象的情况。内存泄露:指程序中动态分配内…

html为什么未响应,Word2010总是未响应怎么办?

回答:一、自动恢复尚未保存的修改Word提供了“自动恢复”功能,可以帮助用户找回程序遇到问题并停止响应时尚未保存的信息。实际上,在你不得不在没有保存工作成果就重新启动电脑和Word后,系统将打开“文档恢复”任务窗格&#xff0…

Conway#39;s law(康威定律)

Mel Conway 康威在加利福尼亚理工学院获得物理学硕士学位,在凯斯西储大学获得数学博士学位。毕业之后,他参与了很多知名的软件项目,如 Pascal 编辑器。在他的职业生涯中,康威观察到一个现象:软件团队开发的产品是对公…

java实现打印倒直角三角形

package cn.jbit.nestedloops; import java.util.Scanner; /*** 输入行数打印倒直角三角形*/ public class InvertRTriAngle {public static void main(String[] args) {int rows 0; //三角形行数System.out.print("请输入直角三角形的行数:");Scanner i…

使用Visual Studio Code开发Asp.Net Core WebApi学习笔记(二)-- Web Api Demo

在上一篇里,我已经建立了一个简单的Web-Demo应用程序。这一篇将记录将此Demo程序改造成一个Web Api应用程序。 一、添加ASP.NET Core MVC包 1. 在project.json文件添加Microsoft.AspNetCore.Mvc包 { "version": "1.0.0-*", "buildOptions&…

学院派 实践派 计算机科学与技术,饶旻现场为boss所在企业“挑错”

饶旻,高考数学成绩146分,考研数学成绩145分,用数字告诉boss团自己是智商超过140的高才能求职者,16岁就考上中国人民大学计算机科学与技术本科,现在24的饶旻是中国人民大学网络经济学专业博士在读生,上《非你…

使用Dom4j解析XML

转载自 使用Dom4j解析XMLdom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在Sou…

.NET Core扩展IServiceCollection自动注册服务

前言 在ASP.NET Core中使用依赖注入中使用很简单,只需在Startup类的ConfigureServices()方法中,通过IServiceCollection接口进行注入即可,其它的无需关心。 通过接口的Add*方法进行注册,代码如下: 1 public void Confi…

微型计算机中被处理信息称为,2011海南省计算机等级考试试题 二级C试题考资料...

1、微型计算机的显示器显示西文字符时,一般情况下一屏最多可显示( A )A、25行,每行80个字符 B、25行,每行60个字符C、20行,每行80个字符 D、20行,每行60个字符2、计算机中,一个浮点数由两部分组成&#xff…

dom4j读取XML文件内容

转载自 dom4j读取XML文件内容<?xml version"1.0" encoding"UTF-8"?> <RESULT> <VALUE><NO>A1234</NO><ADDR>四川省XX县XX镇XX路X段XX号</ADDR> </VALUE> <VALUE><NO>B1234</NO><…

我为什么用docker-compose来打包开发环境

BUILD, SHIP, RUNDocker is the world’s leading software containerization platform Docker的出现&#xff0c;让虚拟技术更上一个台阶。更有Docker Hub作为docker images的市场载体&#xff0c;让全世界分享你的成果。 建议使用Docker for Mac(10.10.3) 或 Docker for Wind…

微型计算机使用键盘上的alt键称为,微型计算机使用的键盘上的Alt键称为_____。...

摘要&#xff1a;须牢盒安光缆固、微型装必整齐接头&#xff0c;信线规定《通路工程验范》收规&#xff0c;作伸必须两侧缩(。在交)米越时为(&#xff0c;微型信光)规途通缆线路工定《长程验范》收规。小净火栓光缆米架空距消距为的最&#xff0c;计算机使键盘t键信光)规途通缆…

java使用htmlparser提取网页纯文本例子

转载自 java使用htmlparser提取网页纯文本例子这篇文章主要介绍了java使用htmlparser提取网页纯文本例子,需要的朋友可以参考下package com.test; import org.htmlparser.Node; import org.htmlparser.NodeFilter; import org.htmlparser.Parser; import org.htmlparser.filt…

java实现打印等腰三角形

package cn.jbit.nestedloops; import java.util.Scanner; /*** 输入行数打印等腰三角形*/ public class IsoTriangle {public static void main(String[] args) {int rows 0; //三角形行数System.out.print("请输入等腰三角形的行数&#xff1a;");Scanner input …

在.NET Core中使用MySQL5.7的JSON类型字段

Getting Started ① Adding pomelo myget feed into your NuGet.config which located in your solution root. <?xml version"1.0" encoding"utf-8"?><configuration><packageSources><add key"nuget.org" value"h…

中南大学计算机网.doc,中南大学计算机网络实验报告.doc

计算机网络实验报告0909122820周建权第第 PAGE \* MERGEFORMAT 1 页 共 NUMPAGES \* MERGEFORMAT 11 页计算机网络实验报告专业班级&#xff1a;信安1202班指导老师&#xff1a;王伟平姓 名&#xff1a;周建权学 号&#xff1a;0909122820实验二 网络路由层协议模拟实验网络路由…