本文目录导读:

非安全 Cookie 标志,通常指的是 Secure 标志缺失 的 Cookie。
如果一个 Cookie 没有设置 Secure 标志,那么这个 Cookie 在 HTTP(未加密)和 HTTPS(加密)连接下都会被发送,这被认为是一种安全风险。
下面为你详细解释其含义、风险及其正确设置方式。
什么是 Secure 标志?
Secure 是服务器在设置 Cookie 时可以附加的一个属性,它告诉浏览器:
“这个 Cookie 只能通过 HTTPS 加密连接发送,绝不能通过不安全的 HTTP 连接发送。”
- 有 Secure 标志:Cookie 只在
https://页面下发送,在http://页面下,浏览器会拒绝发送它。 - 无 Secure 标志(非安全):Cookie 在
http://和https://页面下都会发送。
非安全 Cookie 的主要风险
当一个 Cookie 缺失 Secure 标志(即“非安全 Cookie”),它面临以下主要风险:
- 中间人攻击 (MITM):这是最大的风险,如果用户在访问一个包含非安全 Cookie 的网站时,其网络连接(如公共 Wi-Fi)被攻击者劫持,攻击者可以通过网络嗅探手段,截获未加密的 HTTP 流量中的数据包,直接读取 Cookie 的内容,如果是会话 ID 或认证 Token 这类敏感信息,攻击者就能直接窃取用户身份,进行会话劫持。
- 数据泄露:即使不使用主动攻击,如果网站的某些页面仍通过 HTTP 加载(例如混合内容或 HTTP 页面),非安全 Cookie 也会毫无保护地在网络上明文传输,增加了泄露风险。
- 违反安全标准:对于涉及敏感信息(如登录态、支付信息)的网站,缺失
Secure标志通常违反行业安全标准(如 PCI DSS)和最佳实践。
如何解决/避免非安全 Cookie?
要解决这个问题,核心就是确保所有敏感 Cookie 都设置了 Secure 标志,并配合其他安全措施。
解决方案 1:确保全站启用 HTTPS
- 这是前提,只有全站使用 HTTPS,浏览器才能安全地发送和接收带
Secure标志的 Cookie。 - 部署 SSL/TLS 证书,并配置网站将所有 HTTP 请求强制重定向(301 或 302)到 HTTPS。
解决方案 2:在服务器端设置 Secure 标志
在设置 Cookie 时,显式添加 Secure 属性,不同后端语言/框架的实现方式如下:
Python (Flask)
response.set_cookie('session_id', value, secure=True, httponly=True, samesite='Lax')
Python (Django)
# 在 settings.py 中全局启用 SESSION_COOKIE_SECURE = True CSRF_COOKIE_SECURE = True
Node.js (Express)
res.cookie('session_id', value, { secure: true, httpOnly: true, sameSite: 'Lax' });
Java (Servlet API)
Cookie cookie = new Cookie("session_id", value);
cookie.setSecure(true);
// 或使用 Spring Session 配置
response.addCookie(cookie);
PHP
setcookie("session_id", $value, [
'secure' => true,
'httponly' => true,
'samesite' => 'Lax'
]);
解决方案 3:配合其他重要安全标志
单一 Secure 标志还不够,建议配合以下标志提供多层防护:
HttpOnly标志:阻止 JavaScript 访问 Cookie(如document.cookie),防止 XSS 攻击窃取 Cookie。SameSite标志:控制第三方网站发起的请求是否携带该 Cookie,设置为Lax或Strict可以有效防范 CSRF(跨站请求伪造)攻击。
解决方案 4:不使用 HTTP 链接加载任何资源
- 确保网页中所有的 JavaScript、图片、CSS 等资源都通过 HTTPS 加载,否则,即使设置了
Secure标志,如果页面本身是通过 HTTP 加载的(这在现代浏览器中会提示“不安全”),Cookie 依然会被发送。
| Cookie 状态 | Secure 标志 |
传输方式 | 风险等级 | 安全性 |
|---|---|---|---|---|
| 安全 Cookie | 有 | 仅 HTTPS | 低 | 高 |
| 非安全 Cookie | 缺失 | HTTP + HTTPS | 高 | 低 |
非安全 Cookie 是 Web 开发中一个需要被严肃对待的安全风险。 对于任何包含敏感信息(会话、认证、支付等)的 Cookie,必须设置 Secure 标志,并配合 HttpOnly 和 SameSite 标志,同时确保网站全站启用 HTTPS,这样做能有效防止会话劫持、中间人攻击等常见网络安全威胁。