如何使用JavaScript读取浏览器中HttpOnly和Secure属性的Cookie
首先明确浏览器对两类Cookie属性的强制规则:
HttpOnly是规范定义的安全隔离属性,浏览器从底层就禁止任何客户端JavaScript访问带该标记的Cookie,不存在任何前端层面的合规绕过、读取方法。这个设计的核心作用是当站点发生XSS漏洞时,攻击者无法直接窃取用户登录态等存在Cookie里的敏感凭证。Secure属性本身不会阻止JavaScript读取Cookie,它的作用只是限制Cookie仅在HTTPS安全上下文(本地localhost调试环境也属于受信任的安全上下文)中才会被加载、可用。如果你在符合要求的安全环境下读不到带Secure标记的Cookie,先排查这个Cookie是不是同时加了HttpOnly标记——只要没设置HttpOnly,带Secure属性的Cookie完全可以通过document.cookie正常读取。
带HttpOnly标记的Cookie的正确读取路径
这类Cookie会被浏览器自动附在对应域名下的每一次HTTP请求头里,只有服务端程序可以正常解析获取:
- 服务端接收到请求后,直接从请求头的
Cookie字段就能解析到所有关联Cookie,包括带HttpOnly、Secure标记的内容,这是唯一符合规范的读取方式。 - 如果前端业务确实需要用到这类Cookie里存储的非敏感值,不要尝试在前端侧找漏洞绕限制,应该由服务端单独提供接口,把可以对外暴露的字段值通过响应返回给前端使用。注意绝对不要把登录会话类的敏感HttpOnly Cookie值直接透传给前端,不然HttpOnly的XSS防护作用就完全失效了。
提醒:网上流传的各类“前端绕过读取HttpOnly Cookie”的技巧,要么是利用早就被官方修复的浏览器历史漏洞,要么需要用户手动修改本地浏览器的安全配置,完全不适用于面向普通用户的生产环境,不要在正式业务里依赖这类方案。
内容的提问来源于stack exchange,提问作者Lukas Morinyo
相关产品推荐
相关产品推荐

