如何在 ASP.Net 中实现 CSRF Guard

发布于 2024-12-20 21:57:07 字数 161 浏览 3 评论 0原文

我需要在我的代码(asp.net)中实现CSRF(跨站请求伪造)防护。 虽然我从 OWASP 获得了一个库,但由于没有给出任何文档,所以实现它很痛苦。有人可以为我提供一种更简单的方法来在 .net 中实现 csrf 防护,或正确配置 OWASP 库吗?

谢谢

-Chandan

I need to implement CSRF(Cross Site Request Forgery) Guard in my code (asp.net).
Though I got a library from OWASP, implementing it is a pain since no documentation is given. Can someone provide me an easier way to implement csrf guard in .net, or configure OWASP library correctly ?

Thanks

-Chandan

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

凡间太子 2024-12-27 21:57:07

ASP.NET MVC

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

@Html.AntiForgeryToken()

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

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

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

ASP.NET WebForms

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

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

ASP.NET MVC

If you're using asp.net mvc you can use the anti-forgery token. Basically in your view you would place the following code:

@Html.AntiForgeryToken()

And on your controller you would put this attribute at the top of the controller:

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

What this does is ensures that the user cannot submit the form from a remote site, because they are unable to generate the token. You can also create a token with a salt.

ASP.NET WebForms

For asp.net Webforms you can override the OnInit method and set the ViewStateUserKey to the the session id. Web forms will validate the viewstate with a MAC check thereby acting like an anti forgery token. Because an attacker cannot generate a valid viewstate (since they don't have the ability to generate a valid MAC because they can't put the session id in the viewstate) the MAC will fail. You will have to do this on each page, or create a base class that already overrides oninit and does this.

public partial class Default : System.Web.UI.Page
{
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        this.ViewStateUserKey = Session.SessionID;
    }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文