将会话cookie设置为HttpOnly

Dra*_*mok 5 c# asp.net cookies asp.net-mvc session

我正在使用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?

Win*_*Win 6

会话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
}
Run Code Online (Sandbox Code Playgroud)

HttpOnly值在服务器端始终为false,因为无论cookie是否位于httponly中,客户端浏览器都不会将其发送回服务器。

我该如何验证

您可以使用Cookie编辑器,例如Chrome插件EditThisCookie

在此处输入图片说明