CSRF(Cross-site request forgery跨站请求伪造,也被称成为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

CSRF攻击发生的场景:

       CSRF攻击依赖下面的假定:

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

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

  目标站点没有对用户在网站行为的第二授权

Asp.net MVC 内置了对CSRF进行防御的方法如下:

.在View的Form表间中使用

<%=Html.AntiForgeryToken() %>

例如:
<% using (Html.BeginForm("Login", "Admin", FormMethod.Post))
{ %>
<%=Html.AntiForgeryToken() %>
<%= Html.ValidationSummary(true, "登录不成功。请更正错误并重试。") %>
<div>
<fieldset>
<legend>帐户信息</legend>
<div class="editor-label">
<%= Html.LabelFor(m => m.UserName) %>
</div>
<div class="editor-field">
<%= Html.TextBoxFor(m => m.UserName)%>
<%= Html.ValidationMessageFor(m => m.UserName)%>
<label id="UserNameTip"></label>
</div>
<div class="editor-label">
<%= Html.LabelFor(m => m.Password) %>
</div>
<div class="editor-field">
<%= Html.PasswordFor(m => m.Password) %>
<%= Html.ValidationMessageFor(m => m.Password) %>
</div>
<p>
<input type="submit" value="登录" />
</p>
</fieldset>
</div>
<% } %>
.d在对应的Action中用[ValidateAntiForgeryToken]进行标识:如下
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(Usr usr)
{
if (ModelState.IsValid)
{
var model = DB.Context.Single<Usr>(p => p.SystemUser == true && p.UserName == usr.UserName && p.Password == usr.Password);
if (model != null)
{
authenticate.Login(usr.UserName, usr.Role);
return RedirectToAction("UserList", "Admin");
}
else
{
ModelState.AddModelError("", "提供的用户名或密码不正确。");
}
}
return View(usr);
}

以上内容转自:http://www.cnblogs.com/leleroyn/archive/2010/12/30/1921544.html

 似乎要解释清楚AntiXss.HtmlEncode和HttpUtility.HtmlEncode及Server.HtmlEncode之间具体的区别有点困难,但是它们基本都可以用来防止站点受到恶意脚本注入的攻击。按照MSDN的解释,HtmlEncode只能用来将'<','>','&'以及'"'进行转义,另外也包括编码大于0x80的ASCII码,不过这要视服务器的环境而定,不同版本的IIS转义的情况不同。例如将站点发布到IIS6和发布到IIS7上会有区别,另外如果你只是在VS上调试Web应用程序,HtmlEncode的转义情况也不同。

  至于什么是跨站点脚本攻击以及为什么要防止跨站点脚本攻击?大家可以参考《博客园》的这篇文章http://www.cnblogs.com/alilang/archive/2013/01/28/2879589.html

  有关AntiXss.dll的介绍,可以参考MSDN的这篇文章http://msdn.microsoft.com/en-us/library/aa973813.aspx

  考虑下面这个场景:

<br />
<img id='img<%=Server.HtmlEncode(Request.QueryString["userId"])%>' src='/image.gif' /><br />
<br />
An attacker could inject client-side script here by setting userId to:' onload=alert('xss') alt='<br />
  某些特定的环境下上面的HTML代码会存在注入脚本攻击的风险。例如用户在请求页面的URL后面传递这样的参数:?userId=' onload=alert(xss) alt'   则页面会成功执行所注入的脚本!原因可能在于Server.HtmlEncode并不能有效过滤掉用户输入中的恶意字符,同样的情况也可能会出现在HttpUtility.HtmlEncode中。当出现这种情况的时候,考虑将其替换成AntiXss.HtmlEncode方法

以上内容转自: http://www.cnblogs.com/jaxu/archive/2013/03/16/2962449.html

.net mvc 防止 xss 与 CSRF的更多相关文章

  1. 转:MVC Html.AntiForgeryToken() 防止CSRF攻击

    (一)MVC Html.AntiForgeryToken() 防止CSRF攻击 MVC中的Html.AntiForgeryToken()是用来防止跨站请求伪造(CSRF:Cross-site requ ...

  2. MVC Html.AntiForgeryToken() 防止CSRF攻击 - CSDN博客

    原文:MVC Html.AntiForgeryToken() 防止CSRF攻击 - CSDN博客 (一)MVC Html.AntiForgeryToken() 防止CSRF攻击 MVC中的Html.A ...

  3. [ASP.NET MVC]@Html.AntiForgeryToken() 防止CSRF攻击

    MVC Html.AntiForgeryToken() 防止CSRF攻击 MVC中的Html.AntiForgeryToken()是用来防止跨站请求伪造(CSRF:Cross-site request ...

  4. 漏洞科普:对于XSS和CSRF你究竟了解多少

    转自:http://www.freebuf.com/articles/web/39234.html 随着Web2.0.社交网络.微博等等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广 ...

  5. XSS 和 CSRF 攻击

    web安全中有很多种攻击手段,除了SQL注入外,比较常见的还有 XSS 和 CSRF等 一.XSS(Cross Site Scripting)跨站脚本 XSS其实就是Html的注入问题,攻击者的输入没 ...

  6. XSS与CSRF两种跨站攻击比较

    XSS:跨站脚本(Cross-site scripting) CSRF:跨站请求伪造(Cross-site request forgery) 在那个年代,大家一般用拼接字符串的方式来构造动态SQL 语 ...

  7. 【实习记】2014-08-23网络安全XSS与CSRF总结

        XSS:脚本中的不速之客XSS:跨站脚本(Cross-site scripting)CSRF:冒充用户之手CSRF:跨站请求伪造(Cross-site request forgery) 谷歌搜 ...

  8. 总结 XSS 与 CSRF 两种跨站攻击

    前言 在那个年代,大家一般用拼接字符串的方式来构造动态 SQL 语句创建应用,于是 SQL 注入成了很流行的攻击方式.在这个年代, 参数化查询 [1] 已经成了普遍用法,我们已经离 SQL 注入很远了 ...

  9. 浅谈CDN、SEO、XSS、CSRF

    CDN 什么是CDN 初学Web开发的时候,多多少少都会听过这个名词->CDN. CDN在我没接触之前,它给我的印象是用来优化网络请求的,我第一次用到CDN的时候是在找JS文件时.当时找不到相对 ...

随机推荐

  1. Eclipse配置C/C++开发环境

    开发环境:Eclipse3.2.CDT3.1.MinGW5.1 1.Eclipse及CDT的安装到Eclipse的官方网站http://www.eclipse.org上下载Eclipse.安装CDT. ...

  2. 如何删除google流氓扩展(强制安装,并且无权限删除)

    chrome现在也是流氓遍地跑, 没比IE安全到哪里. TubeAdblocKer 这个流氓扩展,强制安装,无法删除.google了一大堆方法,全部无效.祭出了filelocator这个神器之后,终于 ...

  3. 聊聊 #pragma 和 // MARK:

    我去,就这两个东西还要讲?是OC或Swift开发人员都知道是怎么回事好吗?不就是用来标记和分组代码的吗?难道还有别的装逼技能? 当然,其实问大部分人说这两个是什么作用,或者是除了这两个还知道什么的情况 ...

  4. 深入研究Block用weakSelf、strongSelf、@weakify、@strongify解决循环引用(上)

    深入研究Block捕获外部变量和__block实现原理 前言 在上篇中,仔细分析了一下Block的实现原理以及__block捕获外部变量的原理.然而实际使用Block过程中,还是会遇到一些问题,比如R ...

  5. Sequence用堆排序

    Description Given m sequences, each contains n non-negative integer. Now we may select one number fr ...

  6. asp.net session容易丢失解决方案

    web Form 网页是基于HTTP的,它们没有状态, 这意味着它们不知道所有的请求是否来自 同一台客户端计算机,网页是受到了破坏,以及是否得到了刷新,这样就可能造成信息的 丢失. 于是, 状态管理就 ...

  7. LeetCode 278

    First Bad Version You are a product manager and currently leading a team to develop a new product. U ...

  8. iOS开发者如何提高自己的水平(转)

    阅读. 把一大堆的知识塞进脑子里.随着时间流逝,终归有一些会留在脑海里.我觉得有些东西读起来还挺有意思,那么也能算作一种愉快的消遣. 分析. 多去熟悉并了解一些工具,从高层的到底层的,不要害怕去使用他 ...

  9. Android应用中-更新提示显示红点的方案

    什么是红点更新提示? 红点更新提示类似微信朋友圈有新的朋友消息 时会在“发现”tab上显示红点,表示有新的消息. 目前三种显示方式: 1.显示具体数字 2.只显示红点 3.显示省略,表示数量很多 方案 ...

  10. vs如何新建自己工程的环境变量(局部)和 Windows系统(全局).

    来源:http://blog.csdn.net/jtop0/article/details/7574139        在vs2008的Project->Property设置里经常会看到类似$ ...