如何在ASP.Net中实现CSRF Guard

时间:2011-12-14 06:19:41

标签: asp.net security csrf owasp

我需要在我的代码(asp.net)中实现CSRF(Cross Site Request Forgery)Guard。 虽然我从OWASP获得了一个库,但实现它是一件痛苦的事情,因为没有给出任何文档。有人能给我一个更简单的方法来在.net中实现csrf guard,或者正确配置OWASP库吗?

由于

-Chandan

1 个答案:

答案 0 :(得分:0)

ASP.NET MVC

如果您使用的是asp.net mvc,则可以使用防伪令牌。基本上在您的视图中,您将放置以下代码:

@Html.AntiForgeryToken()

在控制器上,您可以将此属性放在控制器的顶部:

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

这样做可确保用户无法从远程站点提交表单,因为他们无法生成令牌。您还可以使用salt创建令牌。

ASP.NET WebForms

对于asp.net Webforms,您可以覆盖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;
    }
}