如何在ASP.Net中实现CSRF卫士

如何在ASP.Net中实现CSRF卫士

问题描述:

我需要在我的代码(asp.net)中实现CSRF(跨站点请求伪造)卫士。 虽然我从OWASP获得了一个库,但由于没有给出文档,实施它是一件痛苦的事情。有人能给我一个更简单的方法来实现.net中的csrf guard,或者正确配置OWASP库吗?如何在ASP.Net中实现CSRF卫士

感谢

-Chandan

+1

您是否探索过使用本机ASP.NET CSRF保护的可能性?如果您的应用程序不通过查询字符串处理输入,则可以使用ViewStateUserKey来防止CSRF攻击。对于HTTP POST请求,ViewStateUserKey保护工作得很好。 – gauravphoenix 2011-12-27 21:11:55

ASP.NET MVC

如果你使用asp.net的MVC,你可以使用防伪标记。基本上,在你看来,你会放置以下代码:

@Html.AntiForgeryToken() 

而且您的控制器上,你会把这个属性在控制器的顶部:

[ValidateAntiForgeryToken] 
public ActionResult Foo() 
{ 
    // Foo code 
} 

这样做是确保用户不能从远程站点提交表单,因为它们无法生成令牌。你也可以用盐创建一个标记。

ASP.NET的WebForms

对于asp.net Web表单可以重写OnInit方法和ViewStateUserKey设置为会话ID。 Web表单将通过MAC检查来验证视图状态,从而起到反伪造令牌的作用。由于攻击者无法生成有效的视图状态(因为他们无法生成有效的MAC,因为他们无法将会话ID置于视图状态中),MAC将失败。您必须在每个页面上执行此操作,或创建一个已覆盖oninit的基类并执行此操作。

public partial class Default : System.Web.UI.Page 
{ 
    protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e); 
     this.ViewStateUserKey = Session.SessionID; 
    } 
} 
+0

如果我不使用MVC,我该如何防止CSRF? – user1663380 2013-09-10 08:42:53