我正在使用 Entity Framework 6.0 开发 ASP.NET MVC 服务器。据我所知,它已设置为与 EF 4.5 ( <httpRuntime targetFramework="4.5" />
) 兼容。
我想确保 session cookie(即存储 session 标识符的 cookie)是 HttpOnly,因为这是行业范围内的最佳实践,有助于防止跨站点请求伪造攻击。
问题是,它是由框架自动创建的,所以我不能在调用构造函数后立即更改对象的属性,就像所有其他 cookie 的情况一样。
在Web.config
,我设置了<httpCookies httpOnlyCookies="true" />
,但是 - 当我检索 session 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 (或者使用稍微更精致/hackish 的过滤器来减少这种情况,或者在登录时手动设置,或者...),但是我不是一个嗜血的野蛮人必须有一个正确的方法。
那么,如何将 session cookie 设置为 HttpOnly?
最佳答案
session Cookie 将始终是httponly。您不能修改或覆盖它。
when I retrieve the session cookie - it is not HttpOnly (its HttpCookie.HttpOnly property is set 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 插件 EditThisCookie .
关于c# - 将 session cookie 设置为 HttpOnly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39708346/