当前位置:首页 >> 网络通讯 >> 网络安全 >> 内容

mvc3.0防止跨站点请求伪造(CSRF)攻击

时间:2015/5/19 18:25:19 作者:平凡之路 来源:xuhantao.com 浏览:

众所周知,asp.net mvc程序在浏览器运行是产生标准的Html标签,包括浏览器要发送的关键数据等内容都在html内容里面。听起来不错,但是假如我们伪造类似的html内容,更改里面的关键数据,在浏览器运行起来会怎么样了?下面我们就做这样一个例子。

CSRF攻击例子:

 

 

 

控制器代码:

 

 

  //初始页面       

 // GET: /Person/Edit/5        

public ActionResult Edit(int id)        

{           

 return View();        

}        

//修改方法        

// POST: /Person/Edit/5        

[HttpPost]       

 public ActionResult Edit(int id, Person person)        

{            try           

              {                

              // 数据库操作代码                

          return RedirectToAction("Success",person);            

               }            

              catch            

               {                

                return View();          

              }       

 }

 

视图代码:

 

 

@model MvcApplication.Models.Person

@{

    ViewBag.Title = "修改人员";

    Layout = "~/Views/Shared/_Layout.cshtml";

}

<h2>

    修改人员</h2>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>

<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm())

{

    @Html.ValidationSummary(true)

    <fieldset>

        <legend>人员信息</legend>

        @Html.HiddenFor(model => model.ID)

        <div class="editor-label">

            @Html.LabelFor(model => model.Name)

        </div>

        <div class="editor-field">

            @Html.EditorFor(model => model.Name)

            @Html.ValidationMessageFor(model => model.Name)

        </div>

        <div class="editor-label">

            @Html.LabelFor(model => model.Age)

        </div>

        <div class="editor-field">

            @Html.EditorFor(model => model.Age)

            @Html.ValidationMessageFor(model => model.Age)

        </div>

        <p>

            <input type="submit" value="保存"/>

        </p>

    </fieldset>

}

<div>

    @Html.ActionLink("返回列表", "Index")

</div>

 

 

实现CSRF攻击:

 

打开记事本,写入以下代码:

 

<body onload="document.getElementById('fm1').submit()">

<form id="fm1" action=":5132/person/Edit/1001" method="post"><

input name="name" value="张三"/>

<input name="age" value="21"/>

</form><

/body>

然后另存为html文件,双击文件运行。显示一样。这个就叫CSRF攻击。

 

 

 

什么是CSRF攻击?

 

CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。

因为在ASP.NET程序中,我们的用户信息都是存在与cookies里面的,此时在用户自己来说,程序已经可以算是裸奔了。正因为如此,Web程序接受的正常客户端请求一般来自用户的点击链接和表单提交等行为。可是恶意攻击者却可以依靠脚本和浏览器的安全缺陷来劫持客户端会话、伪造客户端请求。攻击者盗用了你的身份,以你的名义发送恶意请求,以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账……造成的问题包括:个人隐私泄露以及财产安全。这就是CSRF攻击。

共有评论 0相关评论
发表我的评论
  • 大名:
  • 内容:
  • 徐汉涛(www.xuhantao.com) © 2024 版权所有 All Rights Reserved.
  • 部分内容来自网络,如有侵权请联系站长尽快处理 站长QQ:965898558(广告及站内业务受理) 网站备案号:蒙ICP备15000590号-1