本文记录了ASP.NET MVC预防CSRF攻击的方法,CSRF作为一种颇具威胁和恶意的攻击手段,如果不进行相应的防御措施,会造成网站在信息安全方面有极大的隐患。一旦网站用户受到跨站请求伪造攻击,恶意攻击者很有可能会对网站用户造成一定的经济损失或者窃取到用户的相关信息。
PS:CSRF(Cross-Site Request Forgery),中文翻译为跨站请求伪造。
其实在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是可以伪造的,所以不要太相信使用这个属性
下面的资料是转载 微软MSDN的一篇文章:ASP.NET 安全 - 保护您的 ASP.NET 应用程序
在这篇链接文章中,对XSS攻击和CSRF攻击都有非常详细的说明,里面也有详细说明ASP.NET MVC的防御手段。
作者:十有三
出处:https://shiyousan.com/post/635623031501302495
版权声明:本文采用知识共享许可协议:署名-相同方式共享 4.0 国际(CC BY-SA 4.0)。欢迎转载本文,转载请声明出处或保留此段声明。