.net mvc 防止 xss 与 CSRF
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的更多相关文章
- 转:MVC Html.AntiForgeryToken() 防止CSRF攻击
(一)MVC Html.AntiForgeryToken() 防止CSRF攻击 MVC中的Html.AntiForgeryToken()是用来防止跨站请求伪造(CSRF:Cross-site requ ...
- MVC Html.AntiForgeryToken() 防止CSRF攻击 - CSDN博客
原文:MVC Html.AntiForgeryToken() 防止CSRF攻击 - CSDN博客 (一)MVC Html.AntiForgeryToken() 防止CSRF攻击 MVC中的Html.A ...
- [ASP.NET MVC]@Html.AntiForgeryToken() 防止CSRF攻击
MVC Html.AntiForgeryToken() 防止CSRF攻击 MVC中的Html.AntiForgeryToken()是用来防止跨站请求伪造(CSRF:Cross-site request ...
- 漏洞科普:对于XSS和CSRF你究竟了解多少
转自:http://www.freebuf.com/articles/web/39234.html 随着Web2.0.社交网络.微博等等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广 ...
- XSS 和 CSRF 攻击
web安全中有很多种攻击手段,除了SQL注入外,比较常见的还有 XSS 和 CSRF等 一.XSS(Cross Site Scripting)跨站脚本 XSS其实就是Html的注入问题,攻击者的输入没 ...
- XSS与CSRF两种跨站攻击比较
XSS:跨站脚本(Cross-site scripting) CSRF:跨站请求伪造(Cross-site request forgery) 在那个年代,大家一般用拼接字符串的方式来构造动态SQL 语 ...
- 【实习记】2014-08-23网络安全XSS与CSRF总结
XSS:脚本中的不速之客XSS:跨站脚本(Cross-site scripting)CSRF:冒充用户之手CSRF:跨站请求伪造(Cross-site request forgery) 谷歌搜 ...
- 总结 XSS 与 CSRF 两种跨站攻击
前言 在那个年代,大家一般用拼接字符串的方式来构造动态 SQL 语句创建应用,于是 SQL 注入成了很流行的攻击方式.在这个年代, 参数化查询 [1] 已经成了普遍用法,我们已经离 SQL 注入很远了 ...
- 浅谈CDN、SEO、XSS、CSRF
CDN 什么是CDN 初学Web开发的时候,多多少少都会听过这个名词->CDN. CDN在我没接触之前,它给我的印象是用来优化网络请求的,我第一次用到CDN的时候是在找JS文件时.当时找不到相对 ...
随机推荐
- CentOS 6.4 安装 thrift-0.9.3
前言 为了能给.NET的程序提供HBase访问接口需要在Hadoop/Spark集群上安装Thrift Thrift介绍 Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强 ...
- Android 高级UI设计笔记03:使用ListView实现左右滑动删除Item
1. 这里就是实现一个很简单的功能,使用ListView实现左右滑动删除Item: (1)当我们在ListView的某个Item,向左滑动显示一个删除按钮,用户点击按钮,即可以删除该项item,并且有 ...
- SSIS 学习(1): 概要【转】
俗话说:“十年磨一剑”,Microsoft 通过5年时间的精心打造,于2005年浓重推出Sql Server 2005,这是自SQL Server 2000 以 后的又一旷世之作.这套企业级的数据库解 ...
- ORM之PetaPoco入门(二)--Petapoco基本用法
1. Petapoco基本用法 1.1. 创建示例工程 首先创建一个工程文件,为了便于展示数据这里创建一个类型为:WindowsApplication的工程文件.命名为:PetapocoTest. 程 ...
- sort排序中的坑
问题的产生原因: 在一篇阿里面试题的跟帖中,很多人应用sort()方法对数组进行排序.看似合情合理的代码,运行结果却频频出错.为什么呢?因为很多人都忽略掉了一点,那就是sort()排序默认情况下是按A ...
- Redis - HyperLogLogs
A HyperLogLog is a probabilistic data structure used in order to count unique things (technically th ...
- 学习Learn Python The Hard Way 前言中的一段话,可与君共勉
在你通过这本书学习编程时,我正在学习弹吉他.我每天至少训练 2 小时,至少花一个小时练习音阶.和声.和琶音,剩下的时间用来学习音乐理论和歌曲演奏以及训练听力等.有时我一天会花 8 个小时来练习,因为我 ...
- ios Swift ! and ?
swift ?和!之间区别: Swift 引入的最不一样的可能就是 Optional Value 了.在声明时,我们可以通过在类型后面加一个? 来将变量声明为 Optional 的.如果不是 Opti ...
- 相似度到大数据查找之Mysql 文章匹配的一些思路与提高查询速度
文章相关度匹配的一些思路---"压缩"预料库,即提取用特征词或词频,量化后以“列向量”形式保存到数据库:按前N组词拼为向量组供查询使用,即组合为1到N字的组合,量化后以“行向量”形 ...
- 当html中存在url中如: onclick="toView('参数1')", 参数1是特别字符,如&asop;"' "等时,浏览器解析时会报错。解决方法如文中描述
解决方案: 自定义标签将字符串转换成unicode编码后输出显示到页面即可 解析原理:解析顺序html ---url ----javascript---url,由于unicode编码在htm解析阶段 ...