c# - 将 session cookie 设置为 HttpOnly

标签 c# asp.net asp.net-mvc session cookies

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

enter image description here

关于c# - 将 session cookie 设置为 HttpOnly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39708346/

相关文章:

c# - ASP.NET 如何在请求中获取自定义 header ?

asp.net - devexpress aspxgridview - 用于分页的自定义文本

javascript - JavaScript 上的正则表达式仅接受小数点后 2 位的数字

asp.net-mvc - ELMAH 没有记录

asp.net-mvc - 在 Controller 外部生成路由,类似于 Url.RouteUrl()

asp.net-mvc - 将变量与静态 html 连接的语法

c# - 如何在不知道结构的情况下在 C# 中反序列化 JSON 对象

c# - Visual Basic.NET 与 C# 中命名空间的区别以及如何处理它们

C#:如何使用RichTextBox.Select()方法?

asp.net - 使用 IIS 6/7 进行 URL 重写 - 重写主机名 {HTTP_HOST}