将HttpCookie设置为HttpOnly

时间:2017-12-12 16:56:49

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

我正在使用以下代码专门设置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

所以我现在有两种不同的安装方式。

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

由于

1 个答案:

答案 0 :(得分:0)

HttpOnly依赖于浏览器,但大多数常见浏览器都可以使用。对于.NET世界,可以像上面针对cookie一样设置它。但是,如果您使用的是.NET Core,则除非您使用的是IIS,否则web.config中不再提及下面提到的默认值,因此您必须在每个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";