/*十有三博客*/
  • 首页
  • 关于本站
  • 网站地图
  • 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攻击

相关文章
  • .NET项目在生成时如何将静态资源文件复制到输出目录
  • 翻译:Changes to the language setting will not take effect until the environment is restarted.
  • ASP.NET MVC 5 学习笔记:使用HandleErrorAttribute处理异常
  • AntiForgeryToken生成过程解析-ASP.NET MVC防伪标记源码学习[上]
  • 无法从带有索引像素格式的图像创建 Graphics 对象
  • ASP.NET MVC 页面静态化操作的思路

文章分类

.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重构重命名的快捷键

推荐文章

  • 网站打开出现 Server Error in '/' Application Validation of viewstate MAC failed
  • c# 字符串string类型转换成DateTime类型
  • 解决网站出现GET .woff 404 (Not Found)的问题
  • SQL查询当前数据上一条和下一条的数据以实现获取文章上下篇文章信息
  • 记录下博客静态化的历程和经验

友情链接

  • Passingwind的博客
  • 码友网

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