aspnet mvc使用@Html.AntiForgeryToken()防止跨站攻击_html/css_WEB-ITnose

asp.net mvc中html.antiforgerytoken()可以防止跨站请求伪造攻击,它跟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();  }

登录后复制

填写完公告,提交,显示
 

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

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

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

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

现在我们来开始模拟跨站请求,假设请求地址是http://localhost:25873/Home/Text,且也满足2,3的情况。

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

nbsp;html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">                    

登录后复制    

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

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

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

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

把上面的代码改成

@using  (Html.BeginForm("Text","Home",FormMethod.Post))  {      @Html.AntiForgeryToken()      @:网站公告:    }  [HttpPost]  [ValidateAntiForgeryToken]  public ActionResult Text()  {      ViewBag.Notice = Request.Form["Notice"].ToString();      return View();  }

登录后复制

这样子我在AntiForgeryText.html中点”黑掉这个网站”,再次发出请求
 

这就成功的防止了跨站攻击

参考资料:asp.net mvc中的@Html.AntiForgeryToken()防止跨站攻击http://www.ourcodelife.com/thread-49179-1-1.html

立即学习“前端免费学习笔记(深入)”;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3117337.html

(0)
上一篇 2025年3月29日 13:33:06
下一篇 2025年3月6日 02:04:41

AD推荐 黄金广告位招租... 更多推荐

发表回复

登录后才能评论