我正在使用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
)。而且我不太清楚如何改变它。
我无法在微软的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?
答案 0 :(得分:5)
会话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发送回服务器,无论cookie是否为httponly。
您可以使用Cookie编辑器,例如Chrome插件EditThisCookie。