Cookie
Cookie(也称为网页cookie、浏览器cookie)是由网站创建的小型文本文件,当用户浏览该网站时,它被存储在用户的设备上。Cookie 的主要作用是帮助网站记住关于您的访问信息,比如登录状态、用户偏好设置、购物车中的物品等,从而在您再次访问网站时能够提供更个性化的用户体验。

查看更多相关内容
Cookie 的 Domain 和 Path 属性有什么作用?如何正确设置?Cookie 的 Domain 和 Path 属性用于控制 Cookie 的作用范围,正确设置这些属性对于安全性和功能实现都很重要。
**Domain 属性**
**作用**
- 指定 Cookie 有效的域名
- 控制哪些子域名可以访问该 Cookie
**设置规则**
```javascript
// 当前域名为 www.example.com
// 1. 不设置 Domain(默认)
document.cookie = "token=abc";
// 只有 www.example.com 可以访问
// 2. 设置为当前域名
document.cookie = "token=abc; Domain=www.example.com";
// 只有 www.example.com 可以访问
// 3. 设置为父域名(带点前缀)
document.cookie = "token=abc; Domain=.example.com";
// 所有子域名都可以访问(www.example.com, api.example.com 等)
// 4. 错误示例:设置为其他域名
document.cookie = "token=abc; Domain=other.com";
// 浏览器会忽略此设置
```
**注意事项**
- Domain 必须是当前域名的父域名或相同域名
- 设置父域名时需要带点前缀(.example.com)
- 不能设置为完全不同的域名
**Path 属性**
**作用**
- 指定 Cookie 有效的路径
- 控制哪些 URL 路径可以访问该 Cookie
**设置规则**
```javascript
// 当前域名为 www.example.com
// 1. 不设置 Path(默认)
document.cookie = "token=abc";
// 只有当前路径及其子路径可以访问
// 2. 设置为根路径
document.cookie = "token=abc; Path=/";
// 整个域名下的所有路径都可以访问
// 3. 设置为特定路径
document.cookie = "token=abc; Path=/api";
// 只有 /api 及其子路径可以访问(/api/users, /api/data 等)
// 4. 设置为父路径
document.cookie = "token=abc; Path=/admin";
// 只有 /admin 及其子路径可以访问
```
**匹配规则**
- Cookie 只在指定的路径及其子路径下发送
- 路径匹配是前缀匹配
- 更具体的路径优先级更高
**组合使用示例**
```javascript
// 场景 1:全站通用 Cookie
document.cookie = "theme=dark; Domain=.example.com; Path=/";
// 场景 2:仅 API 使用的 Cookie
document.cookie = "apiToken=xyz; Domain=.example.com; Path=/api";
// 场景 3:管理后台专用 Cookie
document.cookie = "adminToken=123; Domain=admin.example.com; Path=/admin";
```
**安全考虑**
1. **最小权限原则**
```javascript
// 不推荐:过于宽泛
document.cookie = "token=abc; Domain=.example.com; Path=/";
// 推荐:限制范围
document.cookie = "token=abc; Domain=api.example.com; Path=/api/v1";
```
2. **防止 Cookie 泄露**
- 敏感 Cookie 应限制在特定路径
- 避免在静态资源路径设置 Cookie
- 不同功能的 Cookie 使用不同路径
**实际应用场景**
1. **单点登录(SSO)**
```javascript
// 在认证域名设置
document.cookie = "ssoToken=xyz; Domain=.example.com; Path=/";
// 所有子域名共享登录状态
```
2. **多环境隔离**
```javascript
// 开发环境
document.cookie = "token=dev; Domain=.dev.example.com; Path=/";
// 生产环境
document.cookie = "token=prod; Domain=.example.com; Path=/";
```
3. **功能模块隔离**
```javascript
// 用户模块
document.cookie = "userToken=abc; Path=/user";
// 支付模块
document.cookie = "paymentToken=xyz; Path=/payment";
```
服务端 · 3月7日 12:25
Cookie 的安全属性有哪些?如何防止 Cookie 被窃取?Cookie 的安全属性包括 Secure、HttpOnly、SameSite 和 Domain/Path 限制,这些属性对于防止 Cookie 被窃取或滥用至关重要。
**Secure 标志**
- 只能通过 HTTPS 协议传输
- 防止在非加密连接中泄露
- 示例:`Set-Cookie: token=xyz; Secure`
**HttpOnly 标志**
- 禁止 JavaScript 通过 document.cookie 访问
- 防止 XSS 攻击窃取 Cookie
- 示例:`Set-Cookie: sessionId=abc; HttpOnly`
**SameSite 属性**
- 控制跨站请求时是否发送 Cookie
- 值:Strict(严格模式)、Lax(宽松模式)、None(允许跨站)
- 防止 CSRF 攻击
- 示例:`Set-Cookie: token=xyz; SameSite=Strict`
**Domain 和 Path 限制**
- Domain:指定 Cookie 有效的域名
- Path:指定 Cookie 有效的路径
- 限制 Cookie 的作用范围
- 示例:`Set-Cookie: token=xyz; Domain=.example.com; Path=/api`
**最佳实践:**
- 敏感 Cookie 必须设置 Secure 和 HttpOnly
- 使用 SameSite=Lax 或 Strict 防止 CSRF
- 设置合理的 Domain 和 Path 范围
- 定期更新 Cookie 的过期时间
服务端 · 3月7日 11:43
Cookie 的 Expires 和 Max-Age 属性有什么区别?如何设置 Cookie 的过期时间?Expires 和 Max-Age 都是用于控制 Cookie 过期时间的属性,但它们的实现方式和行为有所不同。
**Expires 属性**
**特点**
- 使用绝对时间(GMT 格式)
- 指定 Cookie 的具体过期日期和时间
- 兼容性更好,支持旧版浏览器
**语法**
```javascript
// 设置 Expires
const expires = new Date();
expires.setDate(expires.getDate() + 7); // 7天后过期
document.cookie = "token=abc; Expires=" + expires.toUTCString();
// 完整示例
document.cookie = "token=abc; Expires=Wed, 09 Jun 2026 10:18:14 GMT; Path=/";
```
**注意事项**
- 时间格式必须是 UTC (GMT)
- 如果设置的时间早于当前时间,Cookie 立即删除
- 客户端和服务器端时间不同步可能导致问题
**Max-Age 属性**
**特点**
- 使用相对时间(秒数)
- 指定 Cookie 从创建开始的有效期
- 更现代的属性,优先级高于 Expires
**语法**
```javascript
// 设置 Max-Age(单位:秒)
document.cookie = "token=abc; Max-Age=3600"; // 1小时后过期
// 完整示例
document.cookie = "token=abc; Max-Age=86400; Path=/"; // 1天后过期
```
**特殊值**
- `Max-Age=0`:立即删除 Cookie
- `Max-Age` 为负数:立即删除 Cookie
- 不设置 Max-Age:会话 Cookie,浏览器关闭时删除
**两者对比**
| 特性 | Expires | Max-Age |
|------|---------|---------|
| 时间类型 | 绝对时间 | 相对时间 |
| 单位 | 日期时间字符串 | 秒数 |
| 优先级 | 低 | 高 |
| 兼容性 | 所有浏览器 | 现代浏览器 |
| 时区问题 | 有 | 无 |
**优先级规则**
```javascript
// 同时设置时,Max-Age 优先
document.cookie = "token=abc; Expires=Wed, 09 Jun 2026 10:18:14 GMT; Max-Age=3600";
// Cookie 会在 1 小时后过期,而不是指定日期
```
**使用场景**
1. **会话 Cookie**
```javascript
// 不设置过期时间
document.cookie = "sessionId=abc";
// 浏览器关闭时删除
```
2. **短期 Cookie**
```javascript
// 使用 Max-Age 更清晰
document.cookie = "tempToken=abc; Max-Age=1800"; // 30分钟
```
3. **长期 Cookie**
```javascript
// 使用 Expires 更直观
const expires = new Date();
expires.setFullYear(expires.getFullYear() + 1);
document.cookie = "rememberMe=true; Expires=" + expires.toUTCString();
```
4. **删除 Cookie**
```javascript
// 方法 1:设置过去的 Expires
document.cookie = "token=abc; Expires=Thu, 01 Jan 1970 00:00:00 GMT; Path=/";
// 方法 2:设置 Max-Age=0
document.cookie = "token=abc; Max-Age=0; Path=/";
```
**最佳实践**
1. **优先使用 Max-Age**
```javascript
// 推荐
document.cookie = "token=abc; Max-Age=3600";
// 不推荐(除非需要兼容旧浏览器)
document.cookie = "token=abc; Expires=" + new Date(Date.now() + 3600000).toUTCString();
```
2. **兼容性处理**
```javascript
function setCookieWithExpiry(name, value, seconds) {
let cookieString = `${name}=${value}`;
// 优先使用 Max-Age
if (typeof seconds === 'number') {
cookieString += `; Max-Age=${seconds}`;
} else {
// 降级使用 Expires
const expires = new Date();
expires.setSeconds(expires.getSeconds() + seconds);
cookieString += `; Expires=${expires.toUTCString()}`;
}
document.cookie = cookieString;
}
```
3. **安全考虑**
- 敏感信息使用短期过期时间
- "记住我"功能使用长期过期时间
- 定期轮换 Token 并更新过期时间
**实际应用示例**
```javascript
// 登录成功后设置 Cookie
function setLoginCookie(token, rememberMe) {
const options = {
httpOnly: true,
secure: true,
sameSite: 'strict',
path: '/'
};
if (rememberMe) {
// 记住我:30天
options.maxAge = 30 * 24 * 60 * 60;
} else {
// 不记住:1小时
options.maxAge = 60 * 60;
}
// 服务器端设置(Node.js Express 示例)
res.cookie('authToken', token, options);
}
```
服务端 · 3月6日 23:40
Cookie 在跨域场景下如何使用?需要注意哪些问题?Cookie 在跨域场景下的使用需要特别注意,因为浏览器的同源策略会限制 Cookie 的访问和发送。
**同源策略与 Cookie**
- Cookie 默认只在同源请求中发送
- 同源:相同协议、域名和端口
**跨域 Cookie 设置**
1. **通过 Domain 属性**
```javascript
// 在父域名设置 Cookie,子域名可访问
document.cookie = "token=xyz; Domain=.example.com; Path=/";
```
- 设置 Domain 为 `.example.com`,所有子域名都能访问
- 注意:Domain 必须是当前域名的父域名或相同域名
2. **跨域请求携带 Cookie**
```javascript
// 前端设置
fetch('https://api.example.com/data', {
credentials: 'include' // 或 'same-origin'
});
// 或使用 XMLHttpRequest
const xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.open('GET', 'https://api.example.com/data');
xhr.send();
```
**服务器端配置**
```javascript
// Express.js 示例
app.use(cors({
origin: 'https://frontend.example.com',
credentials: true // 允许携带 Cookie
}));
// 设置 Cookie 时指定 SameSite
res.setHeader('Set-Cookie', [
'token=xyz; HttpOnly; Secure; SameSite=None'
]);
```
**CORS 与 Cookie 的关系**
- 必须设置 `credentials: 'include'`
- 服务器必须设置 `Access-Control-Allow-Credentials: true`
- `Access-Control-Allow-Origin` 不能是 `*`,必须是具体域名
**第三方 Cookie 限制**
- Chrome、Firefox 等浏览器逐步限制第三方 Cookie
- Safari 已默认阻止第三方 Cookie
- 解决方案:使用 SameSite=None; Secure
**使用场景**
- 单点登录(SSO)
- 跨域 API 认证
- 第三方登录(OAuth)
**安全注意事项**
- 跨域 Cookie 必须使用 Secure 标志
- 验证 Origin 和 Referer 头
- 使用 CSRF Token 提供额外防护
- 设置合理的过期时间
服务端 · 3月6日 23:36
Cookie 和 LocalStorage 有什么区别?在什么场景下使用哪种存储方式?Cookie 和 LocalStorage 都是浏览器提供的客户端存储机制,但它们在容量、作用域、API 和使用场景上有重要区别。
**容量限制**
- Cookie:每个 Cookie 约 4KB,每个域名约 50-100 个
- LocalStorage:每个域名约 5-10MB
**数据传输**
- Cookie:每次 HTTP 请求都会自动发送到服务器
- LocalStorage:不会自动发送,需要手动通过 JavaScript 读取
**API 操作**
- Cookie:通过 document.cookie 字符串操作,需要手动解析
- LocalStorage:提供简洁的键值对 API(setItem、getItem、removeItem)
**过期时间**
- Cookie:可设置过期时间或会话级别
- LocalStorage:永久存储,除非手动删除或清除浏览器数据
**作用域**
- Cookie:可通过 Domain 和 Path 属性精确控制作用域
- LocalStorage:同源策略,仅在同域名、同协议、同端口下共享
**安全性**
- Cookie:可设置 HttpOnly 防止 JavaScript 访问
- LocalStorage:完全可被 JavaScript 访问,不适合存储敏感信息
**使用场景对比**
- Cookie:会话管理、CSRF 防护、服务器需要的数据
- LocalStorage:用户偏好设置、缓存数据、离线应用数据
**代码示例**
```javascript
// Cookie 操作
document.cookie = "name=value; expires=...; path=/";
// LocalStorage 操作
localStorage.setItem('key', 'value');
const value = localStorage.getItem('key');
```
**选择建议**
- 需要发送到服务器的数据用 Cookie
- 纯客户端数据用 LocalStorage
- 敏感信息用 Cookie + HttpOnly
- 大量数据用 LocalStorage
服务端 · 3月6日 21:41
Cookie 和 Session 有什么区别?何时使用 Cookie,何时使用 Session?Cookie 和 Session 都是用于保持用户状态的机制,但它们在存储位置、安全性和使用场景上有显著区别。
**存储位置**
- Cookie:存储在客户端浏览器中
- Session:存储在服务器端(内存、数据库或缓存)
**数据大小**
- Cookie:通常限制在 4KB 左右
- Session:理论上没有大小限制
**安全性**
- Cookie:相对不安全,容易被窃取或篡改
- Session:更安全,数据存储在服务器端
**性能影响**
- Cookie:每次请求都会携带,增加网络传输量
- Session:只传输 Session ID,对性能影响较小
**生命周期**
- Cookie:可设置持久化或会话级别
- Session:通常在用户关闭浏览器或超时后失效
**使用场景**
- Cookie:存储非敏感的用户偏好、追踪数据
- Session:存储敏感信息如用户登录状态、购物车
**Session 的工作原理**
1. 用户登录后,服务器创建 Session 并生成唯一的 Session ID
2. 服务器将 Session ID 通过 Cookie 发送给客户端
3. 客户端在后续请求中携带 Session ID
4. 服务器根据 Session ID 查找对应的 Session 数据
**选择建议**
- 敏感数据使用 Session
- 需要长期保存的非敏感数据使用 Cookie
- 可以结合使用:Session 存储核心数据,Cookie 存储辅助信息
服务端 · 3月6日 21:41
Cookie 在不同浏览器中的表现有什么差异?如何处理浏览器兼容性问题?Cookie 在不同浏览器中的实现和行为存在差异,了解这些差异对于开发兼容性良好的 Web 应用非常重要。
**主要浏览器 Cookie 差异**
1. **容量限制**
- Chrome:每个 Cookie 4KB,每个域名约 180 个
- Firefox:每个 Cookie 4KB,每个域名约 150 个
- Safari:每个 Cookie 4KB,每个域名约 600 个
- Edge:与 Chrome 相同
2. **第三方 Cookie 限制**
- Chrome:逐步限制,计划 2024 年开始默认阻止
- Firefox:默认阻止第三方追踪 Cookie
- Safari:默认阻止所有第三方 Cookie(ITP 策略)
- Edge:与 Chrome 相同
3. **SameSite 默认行为**
- Chrome 80+:默认 SameSite=Lax
- Firefox 79+:默认 SameSite=Lax
- Safari 12+:默认 SameSite=Lax
- Edge 80+:默认 SameSite=Lax
4. **Secure 标志要求**
- Chrome:SameSite=None 必须配合 Secure
- Firefox:SameSite=None 必须配合 Secure
- Safari:SameSite=None 必须配合 Secure
- Edge:SameSite=None 必须配合 Secure
**Safari ITP(智能追踪预防)**
- 自动删除 7 天后未访问的第三方 Cookie
- 限制 Cookie 的有效期最长 7 天
- 影响跨域登录和追踪功能
**Firefox ETP(增强追踪保护)**
- 严格模式阻止所有第三方追踪 Cookie
- 标准模式阻止已知的追踪器 Cookie
- 可通过 about:preferences#privacy 配置
**Chrome 隐私沙盒**
- 计划逐步淘汰第三方 Cookie
- 引入 FLoC、Topics API 等替代方案
- 开发者需要提前准备迁移方案
**兼容性处理建议**
1. **检测浏览器支持**
```javascript
function supportsSameSiteNone() {
try {
document.cookie = 'test=1; SameSite=None; Secure';
return document.cookie.includes('test=1');
} catch (e) {
return false;
}
}
```
2. **渐进增强策略**
```javascript
const cookieOptions = {
httpOnly: true,
secure: true,
sameSite: 'Lax' // 默认使用 Lax
};
// 如果需要跨域,检测支持后再使用 None
if (supportsSameSiteNone()) {
cookieOptions.sameSite = 'None';
}
```
3. **提供降级方案**
- 第三方 Cookie 不可用时使用 LocalStorage
- 实现服务器端会话管理作为备选
- 使用 PostMessage 进行跨域通信
**测试建议**
- 在多个浏览器中测试 Cookie 功能
- 使用浏览器开发者工具检查 Cookie 设置
- 测试隐私模式下的 Cookie 行为
- 验证跨域 Cookie 的兼容性
服务端 · 3月6日 21:40
什么是 Cookie?Cookie 的工作原理和主要用途是什么?Cookie 是由服务器发送并存储在浏览器中的小型文本文件,用于在客户端保存用户状态信息。Cookie 主要包含名称、值、域、路径、过期时间、安全标志和 HttpOnly 标志等属性。
Cookie 的工作原理:
1. 服务器通过 Set-Cookie 响应头将 Cookie 发送到浏览器
2. 浏览器将 Cookie 存储在本地
3. 浏览器在后续请求中通过 Cookie 请求头自动发送 Cookie 到服务器
Cookie 的主要用途:
- 会话管理:保持用户登录状态
- 个性化设置:记住用户偏好
- 购物车功能:保存购物车中的商品
- 追踪分析:统计用户行为数据
Cookie 的限制:
- 大小限制:通常每个 Cookie 不超过 4KB
- 数量限制:每个域名通常限制 50-100 个 Cookie
- 安全性:可能被窃取或篡改,需要配合安全标志使用
服务端 · 3月6日 21:40
如何优化 Cookie 的性能?有哪些减少 Cookie 大小和数量的方法?Cookie 的性能优化对于提升 Web 应用加载速度和用户体验至关重要,特别是在高流量场景下。
**Cookie 性能问题**
1. **请求头膨胀**
- 每个 HTTP 请求都会携带所有匹配的 Cookie
- Cookie 过多会导致请求头过大
- 影响 HTTP/1.1 的连接复用效率
2. **网络传输开销**
- Cookie 数据在每次请求中重复传输
- 增加带宽消耗和延迟
- 移动网络环境下影响更明显
3. **服务器处理开销**
- 服务器需要解析和验证每个 Cookie
- 大量 Cookie 增加服务器 CPU 负载
- 影响请求处理速度
**优化策略**
1. **减少 Cookie 数量和大小**
```javascript
// 不推荐:多个小 Cookie
document.cookie = "userPref1=dark";
document.cookie = "userPref2=en";
document.cookie = "userPref3=large";
// 推荐:合并为一个 Cookie
document.cookie = "userPrefs=theme:dark|lang:en|size:large";
```
2. **使用压缩编码**
```javascript
// 压缩 Cookie 值
function compressCookieValue(value) {
// 使用简短的键名
const compressed = value
.replace(/theme:/g, 't:')
.replace(/language:/g, 'l:')
.replace(/fontSize:/g, 's:');
return compressed;
}
// 示例
// 原始值:theme:dark|language:en|fontSize:large
// 压缩后:t:dark|l:en|s:large
```
3. **限制 Cookie 作用域**
```javascript
// 不推荐:全站 Cookie
document.cookie = "analytics=xyz; Domain=.example.com; Path=/";
// 推荐:仅特定路径
document.cookie = "analytics=xyz; Domain=.example.com; Path=/analytics";
```
4. **分离静态资源 Cookie**
```javascript
// 主域名 Cookie
document.cookie = "session=abc; Domain=.example.com; Path=/";
// 静态资源域名(不设置 Cookie)
// 使用 cdn.example.com,避免 Cookie 传输
```
**高级优化技巧**
1. **Cookie 分片**
```javascript
// 大数据分片存储
function setLargeCookie(name, data) {
const maxSize = 4000; // Cookie 最大 4KB
const chunks = [];
for (let i = 0; i < data.length; i += maxSize) {
chunks.push(data.substring(i, i + maxSize));
}
chunks.forEach((chunk, index) => {
document.cookie = `${name}_${index}=${chunk}`;
});
// 存储分片数量
document.cookie = `${name}_chunks=${chunks.length}`;
}
function getLargeCookie(name) {
const chunkCount = parseInt(getCookie(`${name}_chunks`));
let data = '';
for (let i = 0; i < chunkCount; i++) {
data += getCookie(`${name}_${i}`);
}
return data;
}
```
2. **延迟加载 Cookie**
```javascript
// 首次加载不发送非必要 Cookie
// 使用 JavaScript 延迟设置
window.addEventListener('load', () => {
// 页面加载完成后设置分析 Cookie
setTimeout(() => {
document.cookie = "analytics=xyz; Path=/";
}, 2000);
});
```
3. **Cookie 缓存策略**
```javascript
// 使用 LocalStorage 缓存非敏感数据
function setCachedCookie(name, value, useCache = true) {
if (useCache) {
localStorage.setItem(name, value);
} else {
document.cookie = `${name}=${value}`;
}
}
function getCachedCookie(name, useCache = true) {
if (useCache) {
return localStorage.getItem(name);
} else {
return getCookie(name);
}
}
```
**HTTP/2 优化**
1. **头部压缩**
- HTTP/2 使用 HPACK 算法压缩头部
- Cookie 也会被压缩,减少传输大小
- 但仍建议减少 Cookie 数量
2. **多路复用**
- HTTP/2 支持请求并行
- Cookie 大小对性能影响相对较小
- 但仍需优化以减少延迟
**监控和分析**
1. **Cookie 大小监控**
```javascript
// 监控 Cookie 总大小
function monitorCookieSize() {
const cookies = document.cookie.split(';');
let totalSize = 0;
cookies.forEach(cookie => {
totalSize += cookie.length;
});
if (totalSize > 2000) {
console.warn(`Cookie size too large: ${totalSize} bytes`);
}
return totalSize;
}
```
2. **性能分析**
```javascript
// 分析 Cookie 对性能的影响
function analyzeCookiePerformance() {
const startTime = performance.now();
// 模拟请求
fetch('/api/test', {
credentials: 'include'
}).then(() => {
const endTime = performance.now();
const duration = endTime - startTime;
console.log(`Request duration with cookies: ${duration}ms`);
});
}
```
**最佳实践总结**
1. **最小化 Cookie 使用**
- 只存储必要的数据
- 优先使用 Session Cookie
- 避免存储大文件
2. **合理设置作用域**
- 限制 Domain 和 Path
- 静态资源不设置 Cookie
- 使用独立域名处理静态资源
3. **定期清理**
- 删除过期的 Cookie
- 清理不再使用的 Cookie
- 实现自动清理机制
4. **替代方案**
- 使用 LocalStorage 存储客户端数据
- 使用 Session 存储服务器端数据
- 使用 IndexedDB 存储大量数据
服务端 · 3月6日 21:40
Cookie 的安全风险有哪些?如何防范 Cookie 相关的攻击?Cookie 容易受到多种安全攻击,了解这些攻击方式和防护措施对于构建安全的 Web 应用至关重要。
**常见 Cookie 攻击方式**
1. **XSS(跨站脚本攻击)窃取 Cookie**
- 攻击者通过注入恶意脚本读取 document.cookie
- 防护:使用 HttpOnly 标志
```javascript
// 不安全:可被 XSS 窃取
document.cookie = "token=abc123";
// 安全:HttpOnly 防止 JavaScript 访问
Set-Cookie: token=abc123; HttpOnly
```
2. **CSRF(跨站请求伪造)**
- 攻击者诱导用户发送跨站请求,浏览器自动携带 Cookie
- 防护:使用 SameSite 属性、CSRF Token
```javascript
// 防护示例
Set-Cookie: token=abc123; SameSite=Strict
```
3. **中间人攻击**
- 在非加密连接中截获 Cookie
- 防护:使用 Secure 标志,强制 HTTPS
```javascript
Set-Cookie: token=abc123; Secure
```
4. **Cookie 注入**
- 攻击者伪造或篡改 Cookie 值
- 防护:对 Cookie 值进行签名或加密
**Cookie 安全最佳实践**
1. **设置安全标志**
```javascript
// 完整的安全 Cookie 示例
Set-Cookie: sessionId=xyz123;
HttpOnly;
Secure;
SameSite=Strict;
Path=/;
Domain=.example.com;
Max-Age=3600
```
2. **敏感数据处理**
- 不在 Cookie 中存储明文密码
- 使用加密或签名验证 Cookie 完整性
- 定期轮换 Session ID
3. **过期时间管理**
- 设置合理的过期时间
- 敏感操作后立即失效 Cookie
- 实现"记住我"功能时使用持久 Cookie
4. **服务器端验证**
- 验证 Cookie 的来源和完整性
- 检查 IP 和 User-Agent 变化
- 实现速率限制防止暴力破解
**代码示例:安全的 Cookie 设置**
```javascript
// Node.js Express 示例
res.cookie('token', encryptedToken, {
httpOnly: true,
secure: process.env.NODE_ENV === 'production',
sameSite: 'strict',
maxAge: 3600000, // 1小时
domain: '.example.com'
});
```
**GDPR 和隐私合规**
- 获取用户同意后才能设置 Cookie
- 提供清晰的 Cookie 政策说明
- 实现 Cookie 同意横幅
服务端 · 3月6日 21:40