通过 Javascript 将 cookie 设置为 HttpOnly

Posted

技术标签:

【中文标题】通过 Javascript 将 cookie 设置为 HttpOnly【英文标题】:Set a cookie to HttpOnly via Javascript 【发布时间】:2013-01-19 10:37:23 【问题描述】:

我有一个不是 HttpOnly 的 cookie 我可以通过 javascript 将此 cookie 设置为 HttpOnly 吗?

【问题讨论】:

如何通过 JavaScript 设置一个 JavaScript 本身不应该能够操作的 cookie?只需在服务器端设置即可。 Cookie 不是 HttpOnly,我想通过 Javascript 将其设置为 HttpOnly。 我认为你错过了 HttpOnly 的要点。 好问题。就安全性而言,从客户端设置 HttpOnly cookie 确实没有任何缺点。所以你会认为这是被允许的。但当然不是。 【参考方案1】:

HttpOnly cookie 表示它可用于 JavaScript 等脚本语言。所以在 JavaScript 中,绝对没有可用的 API 来获取/设置 cookie 的 HttpOnly 属性,否则会破坏 HttpOnly 的含义。

只需使用服务器端使用的任何服务器端语言在服务器端设置它。如果 JavaScript 是绝对必要的,你可以考虑让它发送一些(ajax)请求,例如一些特定的请求参数,它触发服务器端语言创建 HttpOnly cookie。但是,这仍然会让黑客很容易通过 XSS 更改 HttpOnly,并且仍然可以通过 JS 访问 cookie,从而使您的 cookie 上的 HttpOnly 完全无用。

【讨论】:

我想知道像“EditThisCookie”浏览器扩展这样的客户端应用程序如何将 HttpOnly 标志更改为 false。 @BalusC 浏览器扩展是用 JS 编写的,并且已经有一段时间了 developer.chrome.com/extensions “你使用 html、JavaScript 和 CSS 等 Web 技术编写它们。” developer.mozilla.org/en-US/Add-ons/WebExtensions/…“它们是使用标准 Web 技术——JavaScript、HTML 和 CSS——以及一些专用的 JavaScript API 编写的。”以及 2013 年编写的开源示例github.com/Asana/Chrome-Extension-Example 我真的不明白如何能够从 JS 设置 HttpOnly 将“击败 HttpOnly 的含义”,只要脚本仍然无法读取 cookie... MDN 说这是被禁止的。 developer.mozilla.org/en-US/docs/Web/HTTP/… @MIWright 它可能允许您覆盖 httponly cookie,然后允许您暴力破解会话 cookie 等,因此 XSS 攻击(尤其是 DoS)仍然可能。

以上是关于通过 Javascript 将 cookie 设置为 HttpOnly的主要内容,如果未能解决你的问题,请参考以下文章

用javascript能不能提取httponly属性的cookie

PHP 无法删除由 JavaScript 设置的 cookie

将 cookie 域设置为 IP 地址(使用 CORS)

使用 PHP 或 JavaScript 在多个域上设置 cookie

JavaScript - cookie学习

JAVA设置HttpOnly Cookies