ASPXAUTH Cookie 的安全标志

问题描述 投票:0回答:4

我们有一个面向外部的应用程序,由外部安全公司进行了渗透测试。应用程序在 ASP.NET MVC4 上开发并在 IIS8/Windows 2012 Server 上运行。

报告的漏洞之一是 ASPXAUTH 不安全。当我检查 cookie 检查器时,有一些带有安全标志的 cookie。但 ASPXAUTH 不是其中之一。

我做了一些研究,并在 web.config 上设置了下面的这些标志

<forms loginUrl="~/Account/Login" timeout="2880"  requireSSL=""  name="AppName" />

<httpCookies httpOnlyCookies="true" requireSSL="true" />

尽管有这些设置,身份验证 cookie 并未标记为安全。我认为这些标志应该足以将应用程序 cookie 标记为安全,但还有一些其他 cookie 也未标记为安全。我不太关心它们,因为它们不包含任何敏感信息。但我想将 ASPXAUTH 标记为安全。

我的问题是,

  1. 在 web.config 上设置这些标志后,没有安全标志的 ASPXAUTH 是否存在安全问题?
  2. 如果是这样,你能告诉我将其标记为安全的正确方法是什么吗?

谢谢。

security asp.net-mvc-4 forms-authentication
4个回答
17
投票

我发现这段代码可以确保我的身份验证 cookie 的安全。我不记得这个的来源,但如果你将它添加到你的 global.asax 中,它就可以解决问题。我不知道为什么,但标签中的 requireSSL=true 不足以确保其安全。

  protected void Application_EndRequest(Object sender, EventArgs e)
    {
        string authCookie = FormsAuthentication.FormsCookieName;

        foreach (string sCookie in Request.Cookies)
        {
            if (sCookie.Equals(authCookie))
            {
                // Set the cookie to be secure. Browsers will send the cookie
                // only to pages requested with https
                var httpCookie = Response.Cookies[sCookie];
                if (httpCookie != null) httpCookie.Secure = true;
            }
        }
    }

12
投票

您的问题似乎是因为您的表单配置不正确。你有:

<forms ... requireSSL="" ... />

你应该有

<forms ... requireSSL="true" ... />

根据 Microsoft

requireSSL
标签中的
httpCookies
属性被
requireSSL
标签的
forms
属性覆盖。您没有设置该值,但指定它可能会导致 IIS 使用默认值
false
。您应该将其设置为
true


0
投票

对 AnarchistGeek 答案的更改:您不想直接迭代 Request.Cookies,因为通过使用响应集合添加 cookie 会使 cookie 立即在请求集合中可用(请参阅 HttpRequest.Cookies 文档中的注释此处 )。当您去设置/更改响应 .ASPXAUTH cookie 时,这会给您带来“在实例化枚举器后修改集合”错误,因为它也在修改请求集合。

protected void Application_EndRequest(Object sender, EventArgs e)
{
    string authCookie = FormsAuthentication.FormsCookieName;
    string[] cookieNames = Request.Cookies.AllKeys;

    foreach (string sCookie in cookieNames)
    {
        if (sCookie.Equals(authCookie))
        {
            var httpCookie = Response.Cookies[sCookie];
            if (httpCookie != null) httpCookie.Secure = true;
        }
    }
}

请注意,此特定解决方案将清除 .ASPXAUTH cookie 的现有值(请参阅此post


0
投票

回答你的第二个问题

可能重复如何保护 .ASPXAUTH 令牌

根据xelco

的回答

防止表单身份验证 cookie 被捕获和 在穿越网络时被篡改,请确保您使用 SSL 所有需要身份验证访问和限制表单的页面 通过将

requireSSL="true"
设置为 SSL 通道的身份验证票证
<forms>
元素。 将表单身份验证 cookie 限制为 SSL 通道集
requireSSL="true"
<forms>
元素上,如下图 代码:

<forms loginUrl="Secure\Login.aspx" requireSSL="true" ... />

通过设置

requireSSL="true"
,您可以设置安全 cookie 属性 确定浏览器是否应将 cookie 发送回服务器。 设置 secure 属性后,cookie 仅由浏览器发送 到使用 HTTPS URL 请求的安全页面。

© www.soinside.com 2019 - 2024. All rights reserved.