Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 防止跨站点请求伪造_C#_Asp.net_Security_Cookies_Cross Site - Fatal编程技术网

C# 防止跨站点请求伪造

C# 防止跨站点请求伪造,c#,asp.net,security,cookies,cross-site,C#,Asp.net,Security,Cookies,Cross Site,我了解并在web上找到了大量的博客和文章来处理它,但没有一个像样的链接,没有一个有用的解决方案来处理asp.net web应用程序中的CSRF攻击。我在我的网站上运行了一个,它报告了跨网站请求伪造并显示了风险 有可能窃取或操纵客户会话和cookie,这些会话和cookie可能用于模拟合法用户,从而允许 黑客可以查看或更改用户记录,并以该用户身份执行交易 我的问题是如何处理ASP.NET web应用程序中的CSRF攻击?如果您查看发布的第二个链接,就会看到MVC中Html.AntiForgeryT

我了解并在web上找到了大量的博客和文章来处理它,但没有一个像样的链接,没有一个有用的解决方案来处理asp.net web应用程序中的CSRF攻击。我在我的网站上运行了一个,它报告了跨网站请求伪造并显示了风险

有可能窃取或操纵客户会话和cookie,这些会话和cookie可能用于模拟合法用户,从而允许 黑客可以查看或更改用户记录,并以该用户身份执行交易


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

如果您查看发布的第二个链接,就会看到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);
}
void ValidateRequestHeader(HttpRequestMessage请求)
{
字符串cookieToken=“”;
字符串formToken=“”;
IEnumerable标记头;
if(request.Headers.TryGetValues(“RequestVerificationToken”,out-tokenHeaders))
{
string[]tokens=tokenHeaders.First().Split(“:”);
if(tokens.Length==2)
{
cookieToken=tokens[0]。Trim();
formToken=tokens[1].Trim();
}
}
防伪。验证(cookieToken,formToken);
}
在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);
}
void ValidateRequestHeader(HttpRequestMessage请求)
{
字符串cookieToken=“”;
字符串formToken=“”;
IEnumerable标记头;
if(request.Headers.TryGetValues(“RequestVerificationToken”,out-tokenHeaders))
{
string[]tokens=tokenHeaders.First().Split(“:”);
if(tokens.Length==2)
{
cookieToken=tokens[0]。Trim();
formToken=tokens[1].Trim();
}
}
防伪。验证(cookieToken,formToken);
}
在web表单应用程序中执行同样的操作应该不会那么困难

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

在web表单应用程序中

ASP.NET提供了一个选项来维护您的ViewState。视图状态 指示页面提交到服务器时的状态。这个 状态是通过在每个页面上放置一个隐藏字段来定义的 控制Viewstate可用作CSRF 防御,因为攻击者很难伪造有效的 视图状态。伪造有效的Viewstate并非不可能,因为它是 参数值可由用户获取或猜测的可行性 攻击者。但是,如果将当前会话ID添加到 ViewState,然后使每个ViewState都是唯一的,因此不受 CSRF

关于CSRF的其他问题:

有可能窃取或操纵客户会话和cookie,这些会话和cookie可能用于模拟合法用户,允许黑客查看或更改用户记录,并作为该用户执行交易

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

在web表单应用程序中

ASP.NET提供了一个选项来维护您的ViewState。视图状态 指示页面提交到服务器时的状态。这个 状态是通过在每个页面上放置一个隐藏字段来定义的 控制Viewstate可用作CSRF 防御,因为攻击者很难伪造有效的 视图状态。伪造有效的Viewstate并非不可能,因为它是 参数值可由用户获取或猜测的可行性 攻击者。但是,如果将当前会话ID添加到 ViewState,然后使每个ViewState都是唯一的,因此不受 CSRF

关于CSRF的其他问题:

有可能窃取或操纵客户会话和cookie,这些会话和cookie可能用于模拟合法用户,允许黑客查看或更改用户记录,并作为该用户执行交易


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

在Asp.net Web表单应用程序中是否有任何解决方案可以在
Global.asax
中处理此问题


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

在Asp.net web表单应用程序中,是否有任何解决方案可以在
global.asax
中处理

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