gpt4 book ai didi

asp.net-mvc - 在没有 SSL 的情况下使用时,AntiForgeryConfig.RequireSsl 会导致随机错误

转载 作者:太空宇宙 更新时间:2023-11-03 12:59:26 24 4
gpt4 key购买 nike

我们的安全团队要求所有 cookie 都设置为 Secure=true。

要为 MVC AntiForgery 设置安全属性,我们使用以下代码:

    protected void Application_BeginRequest(object sender, EventArgs e)
{
AntiForgeryConfig.RequireSsl = HttpContext.Current.Request.IsSecureConnection;
}

但是现在我们的测试服务器出现问题,它没有使用 SSL。有时我们会自发出错

The anti-forgery system has the configuration value AntiForgeryConfig.RequireSsl = true, but the current request is not an SSL request.

在查看 ASP.NET MVC 代码以查明异常位置时,我们发现了以下内容

private void CheckSSLConfig(HttpContextBase httpContext)
{
if (_config.RequireSSL && !httpContext.Request.IsSecureConnection)
{
throw new InvalidOperationException(WebPageResources.AntiForgeryWorker_RequireSSL);
}
}

这似乎是正确的,它应该可以工作,因为执行顺序是

    AntiForgeryConfig.RequireSsl = HttpContext.Current.Request.IsSecureConnection;
// ... something happens in between
if (_config.RequireSSL && !httpContext.Request.IsSecureConnection)
{
throw new InvalidOperationException(WebPageResources.AntiForgeryWorker_RequireSSL);
}

但对于某些请求,HttpContext.Current.Request.IsSecureConnection 似乎返回了 true,尽管我们没有在我们的测试服务器上使用 SSL。

那里发生了什么?为什么我们会得到这个异常?

最佳答案

我正在搜索有关 AntiForgeryConfig.RequireSsl 的信息并找到了您的问题。在您的以下代码中:

protected void Application_BeginRequest(object sender, EventArgs e)
{
AntiForgeryConfig.RequireSsl = HttpContext.Current.Request.IsSecureConnection;
}

您使用本地值 (Request.IsSecureConnection) 修改应用程序级别值 (AntiForgeryConfig.RequireSsl)。

如果您有 2 个具有不同 Request.IsSecureConnection 值的请求,您认为会发生什么?- 第一个请求将 AntiForgeryConfig.RequireSsl 设置为 false- 第二个请求将 AntiForgeryConfig.RequireSsl 设置为 true- 第一个请求由 CheckSSLConfig (true) 评估- 第二个请求由 CheckSSLConfig (true) 评估

您必须避免以这种方式修改全局应用程序设置,并编写您自己的过滤器来处理这种行为。

关于asp.net-mvc - 在没有 SSL 的情况下使用时,AntiForgeryConfig.RequireSsl 会导致随机错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17970174/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com