将会话 cookie 设置为 HttpOnly
Posted
技术标签:
【中文标题】将会话 cookie 设置为 HttpOnly【英文标题】:Setting session cookie to HttpOnly 【发布时间】:2017-02-04 02:56:12 【问题描述】:我正在使用 Entity Framework 6.0 开发一个 ASP.NET MVC 服务器。据我所知,它设置为与 EF 4.5 (<httpRuntime targetFramework="4.5" />
) 兼容。
我想确保会话 cookie(即存储会话标识符的 cookie)是 HttpOnly,因为这是行业范围的最佳实践,有助于防止跨站点请求伪造攻击。
问题是,它是由框架自动创建的,所以我不能像所有其他 cookie 一样在调用构造函数后立即更改对象的属性。
在Web.config
中,我设置了<httpCookies httpOnlyCookies="true" />
,然而——当我检索会话cookie 时——它不是 HttpOnly(它的HttpCookie.HttpOnly 属性设置为false
)。我不知道如何改变它。
我在 Microsoft 的文档中找不到任何关于 Web.config
的 <sessionState>
可以改变这种情况的内容。在 Stack Overflow 上,我只找到了 a four year old question talking about how session cookie is HttpOnly by default,这对我来说是完全相反的,而 a five days old question asking why session cookie is not HttpOnly by default - 由于某种莫名其妙的原因被关闭 - 没有评论 - 作为前者的副本。
我知道I can retrieve the session cookie, check it and set HttpOnly=true
on every request(或者使用稍微精致/骇人听闻的过滤器,或者在登录时手动设置它,或者......),但我不是一个血淋淋的野蛮人 必须有适当的方法来做到这一点。
那么,如何?
【问题讨论】:
我以 Duplicate 的身份关闭了 the second question。接受的answer 明确指出会话Cookie 是httponly,您不能修改它。 @Win 但问题是,在我的项目中,会话 cookie 不是 httponly,所以任何一个框架在 cookie 的默认属性上做了 4 年的 180 度翻转,或者有某种方法可以改变它,而我 - 或我团队中的其他开发者 - 以某种方式改变了它。我想说的是,我的问题的现实和答案不匹配。 【参考方案1】:会话 Cookie 将始终为 httponly。您不能修改或覆盖它。
当我检索会话 cookie 时 - 它不是 HttpOnly(它的 HttpCookie.HttpOnly 属性设置为 false)。
var cookie = Request.Cookies["ASP.Net_SessionId"];
if (cookie != null)
var httpOnly = cookie.HttpOnly; // <-- This is always false
HttpOnly 值在服务器端始终为 false,因为客户端浏览器不会将 cookie 是否在 httponly 中发送回服务器。
如何验证
您可以使用 cookie 编辑器,例如 Chrome Plugin EditThisCookie。
【讨论】:
所以这毕竟是一个 XY 问题。这就是我正在寻找的解释。谢谢。 但我可以在 Chrome 中编辑 HttpOnly cookie -> 应用程序 -> Cookies 自从这篇文章发布以来已经有一段时间了,我想我只是要注意,如果我给会话 cookie 一个明确的名称,那么即使我像这样明确地设置它,它也不会在 Chrome 中显示 HttpOnly : ` var sessionCookie = new CookieBuilder(); sessionCookie.Name = ".MyWebSite"; sessionCookie.HttpOnly=true; sessionCookie.SecurePolicy = CookieSecurePolicy.Always; sessionCookie.SameSite = SameSiteMode.Strict; app.UseSession(new SessionOptions() Cookie = sessionCookie );` 我一定遗漏了一些关于如何让它工作的东西,但它绝对不是默认为 httponly以上是关于将会话 cookie 设置为 HttpOnly的主要内容,如果未能解决你的问题,请参考以下文章