首頁  >  文章  >  web前端  >  aspnet mvc使用@Html.AntiForgeryToken()防止跨站攻击_html/css_WEB-ITnose

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

WBOY
WBOY原創
2016-06-21 08:52:381680瀏覽

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))  {      @:输入信息:<input type="text" name="Notice" id="Notice" />      <input type="submit" value="Submit" />  }  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文件,内容如下

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml" >  <head>      <title></title>  </head>  <body>      <form name="badform" method="post" action="http://localhost:6060/Home/Text">          <input type="hidden" name="Notice" id="Notice" value="你的网站被我黑了。。" />          <input type="submit" value="黑掉这个网站" />      </form>  </body>  </html>


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

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

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



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

把上面的代码改成

@using  (Html.BeginForm("Text","Home",FormMethod.Post))  {      @Html.AntiForgeryToken()      @:网站公告:<input type="text" name="Notice" id="Notice" />  <input type="submit" value="Submit" />  }  [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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn