/*十有三博客*/
  • 首页
  • 关于本站
  • 网站地图
  • RSS订阅

ASP.NET MVC 如何防御CSRF攻击(跨站请求伪造)

2015-03-18 十有三 1 浏览:1万+ .NET技术 ASP.NET MVC

本文记录了ASP.NET MVC预防CSRF攻击的方法,CSRF作为一种颇具威胁和恶意的攻击手段,如果不进行相应的防御措施,会造成网站在信息安全方面有极大的隐患。一旦网站用户受到跨站请求伪造攻击,恶意攻击者很有可能会对网站用户造成一定的经济损失或者窃取到用户的相关信息。

PS:CSRF(Cross-Site Request Forgery),中文翻译为跨站请求伪造。

如何防止受到CSRF攻击?

其实在ASP.NET MVC中防御CSRF攻击还是很简单的,微软在MVC框架中已经提供了令牌验证作为阻止CSRF攻击的方法。下面直接看范例:

在View视图中使用HtmlHelper.AntiForgeryToken方法生成一个隐藏的窗体字段(防伪标记),将该防伪标记放置于表单中:

@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
    //调用@Html.AntiForgeryToken()生成一个防伪标记
    @Html.AntiForgeryToken()
    <input type="text" name="text" class="form-control"/>    
    <input type="submit" value="提交" class="btn btn-primary"/>

}

在所请求的控制器的控制器操作上声明ValidateAntiForgeryToken特性,用于验证是否是伪造请求:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Index(string text)
{
    //此处省略代码...
    return View();
}

这里就使用了ASP.NET MVC框架自带的令牌验证,使用令牌验证可以防御大多数的跨站请求伪造攻击。

这里简单的说下原理,其实就是在表单中放置一个加密的隐藏输入值(就是表单的令牌),在用户提交HTTP请求的时候,和后台对应的令牌相匹配,如果用户所提交的令牌在解密后和后台解密后的令牌值一样,那就表示此次请求不是跨站伪造的。

此外使用POST请求接收用户的数据,一定程度上可以预防由恶意的GET请求所发动的CSRF攻击,比如带有恶意图片路径的img标签。

当然也可以考虑使用HttpRequest.UrlReferrer属性,从而判断当前的请求是否是本网站还是其他恶意请求。不过由于UrlReferrer是可以伪造的,所以不要太相信使用这个属性

防范CSRF的一些实用规则

下面的资料是转载 微软MSDN的一篇文章:ASP.NET 安全 - 保护您的 ASP.NET 应用程序

在这篇链接文章中,对XSS攻击和CSRF攻击都有非常详细的说明,里面也有详细说明ASP.NET MVC的防御手段。

  1. 确保攻击者不能通过简单地单击 GET 请求链接来重播请求。 针对 GET 请求的 HTTP 规范意味着 GET 请求应该只用于检索,而不应该用于状态修改。
  2. 确保在攻击者已使用 JavaScript 模拟窗体 POST 请求的情况下不能重播请求。
  3. 阻止通过 GET 执行的任何操作。 例如,禁止通过 URL 创建或删除记录。 理想情况下,这些措施需要一些用户交互。 尽管这种方法不能防范更精明的、基于窗体的攻击,但它可以限制大量较容易实现的攻击,例如电子邮件图像示例中描述的攻击类型以及 XSS 遭到破坏的网站中嵌入的基本链接。

作者:十有三

出处:https://shiyousan.com/post/635623031501302495

版权声明:本文采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。欢迎转载本文,转载请声明出处或保留此段声明。


  • 上一篇: 在windows server 2012中实现SQL SERVER EXPRESS自动备份数据库
  • 下一篇: 什么是CSRF攻击

相关文章
  • 如何在ASP.NET的web.config配置文件中添加MIME类型
  • 网站打开出现 Server Error in '/' Application Validation of viewstate MAC failed
  • ASP.NET MVC中注册Global.asax的Application_Error事件处理全局异常
  • 解决VS2013编码遇到无法嵌入互操作类型“ChinaPay_NET.NetPayClientClass”请改用适用的接口的问题
  • 托管调试助手 "DateTimeInvalidLocalFormat":“正在将 UTC DateTime 转换为某种文本
  • 无法从带有索引像素格式的图像创建 Graphics 对象

文章分类

.NET技术 123 数据库 24 Web前端 21 网站建设运维 37 操作系统与应用 66 程序猿日常 11 开发工具 12 其他随笔 13

文章标签

ASP.NET ASP.NET MVC C# CSS HTML IIS Javascript Linux MongoDB MySql SQL SQL Server Visual Studio Windows系统 版本控制系统 插件工具 服务器 搞笑娱乐 好文分享 软件应用 生活知识 手机问题 随笔 网络知识 网站设计优化 网站维护 养生保健 异常处理 硬件设备 游戏攻略

热门文章

  • IIS8如何安装和使用URL重写工具-URL Rewrite
  • 林蛋大与楚中天,朱肚皮与朱月坡
  • 解决IE11安装升级失败和在安装前需要更新的问题
  • Windows Server 2012无法安装 .NET3.5-安装角色或功能失败,找不到源文件
  • VS重构重命名的快捷键

推荐文章

  • Windows Server 2012 R2 更改计算机管理员账号提示“出现扩展错误,未能保存本地策略数据库”
  • 为什么谷歌adsense广告位会展示百度联盟的广告
  • SQL Service 2008 SQL语句 四舍五入保留两位小数
  • 解决VirtualBox-Error Failed to open a session for the virtual machine错误
  • 吃未熟的猕猴桃导致舌头发麻的解决办法

友情链接

  • Passingwind的博客
  • 码友网

知识共享许可协议 CC BY-SA 4.0本站作品采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。
闽ICP备15003702号
闽公网安备 35020302035102号