防止跨站请求伪造

时间:2014-07-10 11:49:41

标签: c# asp.net security cookies cross-site

我理解Cross-Site Request Forgery并在asp.net mvc找到了大量博客,网上文章来处理它,但是没有一个合适的链接,有用的解决方案来处理asp.net网络应用程序中的CSRF攻击。我在我的网站上运行了security tool,并报告了跨网站请求伪造并显示风险

可以窃取或操纵客户会话和Cookie,这可能会用于冒充合法用户,允许 黑客查看或更改用户记录,以及以该用户

执行交易

我的问题是如何处理ASP.NET Web应用程序中的CSRF攻击?

3 个答案:

答案 0 :(得分:1)

如果你查看你发布的第二个链接,你会看到MVC中Html.AntiForgeryToken()验证的逻辑:

void ValidateRequestHeader(HttpRequestMessage request)
{
    string cookieToken = "";
    string formToken = "";

    IEnumerable<string> tokenHeaders;
    if (request.Headers.TryGetValues("RequestVerificationToken", out tokenHeaders))
    {
        string[] tokens = tokenHeaders.First().Split(':');
        if (tokens.Length == 2)
        {
            cookieToken = tokens[0].Trim();
            formToken = tokens[1].Trim();
        }
    }
    AntiForgery.Validate(cookieToken, formToken);
}

在您的网络表单应用中,难以做到这一点。

有关可能的解决方案,请参阅THIS答案。

答案 1 :(得分:0)

网络表单应用中的ViewState mechanism can be used to protect against CSRF

  

ASP.NET有一个维护ViewState的选项。 ViewState   表示提交给服务器时页面的状态。该   状态是通过放置在每个页面上的隐藏字段定义的    控制。 Viewstate可用作CSRF   防御,因为攻击者很难伪造有效的   视图状态。由于它是伪造有效的Viewstate并非不可能   可行的是,参数值可以通过获得或猜测   攻击者。但是,如果将当前会话ID添加到   ViewState,它然后使每个Viewstate独特,从而免疫   CSRF

关于CSRF的另一个问题:

  

可以窃取或操纵客户会话和Cookie,这些会话和Cookie可能用于冒充合法用户,允许黑客查看或更改用户记录,以及以该用户身份执行交易

CSRF攻击通常不允许攻击者查看任何内容,只能代表登录用户发出请求。但是,如果存在不需要提交当前密码的更改密码选项,则攻击者可能能够使用受害者的会话为攻击者调用此函数,然后再直接登录为受害者用户。

答案 2 :(得分:0)

Asp.net Web表单应用程序中是否有相同的解决方案可以在Global.asax处理。

在MVC中它变得非常简单但是如果旧的应用程序是简单的Web表单并且想要在全局级别防止这种攻击那么将是什么解决方案。