[英]Setting session cookie to HttpOnly
我正在使用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上我只发现了一个四年前的问题,谈论默认情况下会话cookie是如何HttpOnly ,这对我来说是完全相反的,还有一个五天的问题,询问为什么会话cookie默认不是 HttpOnly - 这对于一些莫名其妙的问题理由被关闭 - 没有评论 - 作为前者的副本。
我知道我可以检索会话cookie,检查它并在每个请求上设置HttpOnly=true
(或者使用稍微更精细/ hackish的过滤器来做更少的事情,或者在登录时手动设置它,或者......),但是我我不是一个血淋淋的野蛮人必须有一个正确的方法来做到这一点。
那么,如何将会话cookie设置为HttpOnly?
会话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 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.