防止跨站点请求伪造

本文关键字:请求 伪造 站点 | 更新日期: 2023-09-27 18:12:22

我了解跨站请求伪造,并在网上找到了许多博客,文章来处理它在asp.net mvc中,但没有得到一个体面的链接,有用的解决方案来处理asp.net web应用程序中的CSRF攻击。我在我的网站上运行了一个安全工具,它报告了跨站点请求伪造并显示了风险

有可能窃取或操纵客户会话和cookie,它们可能被用来冒充合法用户,从而允许黑客可以查看或修改用户记录,并以用户

的身份执行交易。

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

防止跨站点请求伪造

如果你看你发布的第二个链接,你会看到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);
}

在你的web-forms应用中做同样的事情应该不难。

ViewState机制可以用来防止web表单应用中的CSRF。

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

关于CSRF的另一个问题:

有可能窃取或操纵客户会话和cookie,它们可能被用来冒充合法用户,允许黑客查看或更改用户记录,并以该用户的身份执行事务

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

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

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