【问题标题】:How to Implement CSRF Guard in ASP.Net如何在 ASP.Net 中实现 CSRF Guard
【发布时间】:2013-09-10 18:03:59
【问题描述】:

我需要在我的代码 (asp.net) 中实现 CSRF(Cross Site Request Forgery) Guard。 虽然我从 OWASP 获得了一个库,但实施它很痛苦,因为没有提供任何文档。有人可以为我提供一种更简单的方法来在 .net 中实现 csrf 保护,或者正确配置 OWASP 库吗?

谢谢

-陈丹

【问题讨论】:

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

标签: asp.net security csrf owasp


【解决方案1】:

ASP.NET MVC

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

@Html.AntiForgeryToken()

在你的控制器上,你可以把这个属性放在控制器的顶部:

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

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

ASP.NET 网络表单

对于 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;
    }
}

【讨论】:

  • 如果我不使用 MVC,如何防止 CSRF?
  • @user1663380 我已经更新了代码以包含一个网络表单示例。
  • 似乎最初的任务是如何在 ASP.Net 实现中专门实现 CSRFGuard (owasp.org/index.php/CSRFGuard_3_User_Manual)。您提供了一些关于如何在 .Net 中防止 CSRF 攻击的建议,但根本没有解决在 .Net 中实施 CSRFGuard 的原始问题。这是带有 CSRF 代码 (github.com/aramrami/OWASP-CSRFGuard) 的 GitHub 页面的链接。还有其他人对如何在 .Net 中实施 CSRFGuard 有任何有用的建议吗?谢谢。
猜你喜欢
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 2017-09-20
  • 1970-01-01
  • 2015-11-21
  • 2020-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多