【发布时间】: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(或者使用稍微精致/骇人听闻的过滤器,或者在登录时手动设置它,或者......),但我不是一个血淋淋的野蛮人 必须有适当的方法来做到这一点。
那么,如何将会话 cookie 设置为 HttpOnly?
【问题讨论】:
-
我以 Duplicate 的身份关闭了 the second question。接受的answer 明确指出会话Cookie 是httponly,您不能修改它。
-
@Win 但问题是,在我的项目中,会话 cookie 不是 httponly,所以任何一个框架在 cookie 的默认属性上做了 4 年的 180 度翻转,或者有某种方法可以改变它,而我 - 或我团队中的其他开发者 - 以某种方式改变了它。我想说的是,我的问题的现实和答案不匹配。
标签: c# asp.net asp.net-mvc session cookies