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. python分页和session和计算时间差

    分页 #!/usr/bin/env python # -*- coding:utf-8 -*- class Pagenation: def __init__(self,current_page,all ...

  2. cocos2d-x中使用json

    首先去下载JsonCpp这个库,放到项目的Class目录下,再在项目中添加进来. 然后...然后看图... //JsonTestLayer.h #pragma once #include " ...

  3. App Thinning

    App Thinning 由于项目中需要开启Bitcode编译,之前对Bitcode也有些误区,故整理了下相关知识,仅供参考,如有不对,还请指出. 当前 iOS App 的编译打包方式是把适配兼容多个 ...

  4. 【原创】 windows下开发软件推荐

    1. 数据库查看器工具 navicat.exe

  5. [原创]centos6.5 dhcpd 服务一直failed状态

    因为要部署kickstart自动化系统分发,所以需要在上面配置dhcp服务器,之前也使用同样的机器进行配置,没是没有问题的,但是这次在配置了dhcpd.conf文件后,重启服务的时候却一直提示 [ro ...

  6. asp.net中web.config配置节点大全详解【转】

    web.config 文件查找规则: (1)如果在当前页面所在目录下存在web.config文件,查看是否存在所要查找的结点名称,如果存在返回结果并停止查找. (2)如果当前页面所在目录下不存在web ...

  7. JMS - 消息确认

    消息确认机制 消息确认协议是保证消息传送的关键所在,同时,支持确认也是 JMS API 语义的要求.以下将分别从消息生产者.消息服务器.消息消费者的角度,来考察消息确认机制. 从消息生产者的角度考察 ...

  8. 【AngularJs】---表单验证

    1. 必填项 验证某个表单输入是否已填写,只要在输入字段元素上添加HTML5标记required即可: <input type="text" required /> 2 ...

  9. IIS服务器应用程序不可用的解决办法

    转载:http://www.cnblogs.com/caicainiao/archive/2010/11/29/1891085.html 这个问题见了好几次,在.net下 Microsoft visu ...

  10. CSS常用中文字体、字号

    字体(font-family): 新细明体:PMingLiU 细明体:MingLiU 标楷体:DFKai-SB 黑体:SimHei 宋体:SimSun 新宋体:NSimSun 仿宋:FangSong  ...