通过 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