Security 我是否需要使用';暂时';ASP.NET WebForms中用于防范CSRF的令牌?

Security 我是否需要使用';暂时';ASP.NET WebForms中用于防范CSRF的令牌?,security,webforms,csrf,Security,Webforms,Csrf,在ASP.NET WebForms应用程序中,该应用程序: 通过将ViewStateUserKey设置为会话ID protected override void OnInit(EventArgs e) { base.OnInit(e); if (User.Identity.IsAuthenticated) ViewStateUserKey = Session.SessionID; } 在派生基页上 仅使用回发来执行任何敏感操作 EnableViewStateMa

在ASP.NET WebForms应用程序中,该应用程序:

  • 通过将
    ViewStateUserKey
    设置为会话ID

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        if (User.Identity.IsAuthenticated)
            ViewStateUserKey = Session.SessionID;
    }
    
    在派生基页上

  • 仅使用回发来执行任何敏感操作

  • EnableViewStateMac
    始终处于启用状态

  • 我是否仍然需要使用随机令牌实现隐藏的表单字段值,在后续请求中检查该值以抵御CSRF攻击

    这不是针对CSRF的完整保护方法。任何非回发请求(如GET)仍然易受攻击。此外,我还没有使用这种方法,老实说,ViewState操作可能是一个更严重的漏洞。将viewstate提供给客户端的想法并不是一种深入防御的方法。加密Nonce是解决这个问题的一个非常好的方法,这就是为什么它最常用的原因。但这不是唯一的解决办法,你应该阅读。对于记录而言,Nonce只是指只使用一次的值,主键是Nonce,但这并不停止CSRF。您需要一个加密的nonce,这是一个只使用一次的值,并且很难猜测

    但是不是每次回发时都对视图状态进行加密和检查以防篡改吗?如果没有可能导致应用程序更新或更改的GET请求,那么使用CSRF GET-to-URL可以利用什么?@Omar yeah,但加密系统失败。“纵深防御”,你应该计划失败。此状态应为“管理服务器端”,用户跟踪viewstate会浪费带宽、cpu时间,而且根本不安全。@在asp.net oracle padding攻击之前,Omar的借口是“我们可以将状态存储在cookie中,它是加密的!”。是的,除了它可以被破坏,在某些系统上远程代码执行成为可能。这是一种严重的加密误用,会话id应该始终使用加密的nonce,因此使用会话id的唯一缺点是它比加密生成的令牌有更高的被破解的概率?假设我的加密数据没有被破解,我仍然不清楚应用程序(如我的问题所述)是否容易受到CSRF攻击。@Omar否,会话id更难猜测。此外,CSRF攻击不会涉及像这样的令牌破解,这样糟糕的设计会带来更严重的风险。