【问题标题】:Setting HttpCookie as HttpOnly将 HttpCookie 设置为 HttpOnly
【发布时间】:2018-05-26 10:41:09
【问题描述】:

我正在使用以下代码专门设置一个 cookie:

System.Web.HttpCookie cookie = new System.Web.HttpCookie("MyCookie", accessToken)
{
    Expires = DateTime.UtcNow.AddDays(30),
    HttpOnly = false,
    Domain = ".mywebsite.com",
    Path = "/"
};

我的 web.config 上也有以下条目:

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

直到今天发生的事情是所有的 cookie 都设置为 HttpOnly 除了 MyCookie 这是我想要的。

但是今天发生了一件奇怪的事情。我使用相同的代码部署了我的 Web 应用程序,并且 MyCookie 被设置为 HttpOnly

所以我现在有两个具有不同行为的不同装置。

所以我的问题是:是否有任何其他配置或操作系统/IIS 版本可以覆盖 cookie 创建方法设置?

谢谢

【问题讨论】:

    标签: c# asp.net-mvc iis asp.net-web-api bearer-token


    【解决方案1】:

    HttpOnly 依赖于浏览器,但适用于大多数常见浏览器。对于 .NET 世界,可以像上面针对 cookie 设置的那样设置。但是,如果您使用.NET Core,除非您使用 IIS,否则 web.config 中将不再有下面提到的默认值,因此您必须在每个 cookie 上设置它。

    考虑到下面的内容与您在代码中的内容一致,我会仔细检查在您设置 cookie 后没有其他任何内容在修改您的 cookie。您是否通过在上面的 cookie 定义之后添加调试代码来检查 HttpOnly 的值是否为真?我还会尝试在新变量中检索 cookie,以确保它也是相同的。

    取自OWASP 网站:

    默认情况下,.NET 2.0 将 HttpOnly 属性设置为 - 会话 ID - 表单身份验证 cookie

    在 .NET 2.0 中,也可以通过 HttpCookie 对象为所有自定义应用程序 cookie 设置 HttpOnly

    通过 system.web/httpCookies 元素中的 web.config

    <httpCookies httpOnlyCookies="true" …> 
    

    或以编程方式

    C# 代码:

    HttpCookie myCookie = new HttpCookie("myCookie");
    myCookie.HttpOnly = true;
    Response.AppendCookie(myCookie);
    

    VB.NET 代码:

    Dim myCookie As HttpCookie = new HttpCookie("myCookie")
    myCookie.HttpOnly = True
    Response.AppendCookie(myCookie)
    

    但是,在 .NET 1.1 中,您必须手动执行此操作,例如,

    Response.Cookies[cookie].Path += ";HttpOnly";
    

    【讨论】:

      猜你喜欢
      • 2017-02-04
      • 2016-12-23
      • 2013-01-19
      • 1970-01-01
      • 2013-08-13
      • 2012-12-12
      • 2016-06-04
      • 2017-01-30
      相关资源
      最近更新 更多