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攻击。