1. 如何實現(xiàn)安全的 HttpOnly 和 Secure Cookie? ?
?問題?:防止 XSS 攻擊竊取 Cookie,同時確保僅通過 HTTPS 傳輸。
?解決方案?:
?服務(wù)端設(shè)置?(Node.js 示例):
res.setHeader('Set-Cookie', [
'token=abc123; HttpOnly; Secure; SameSite=Strict',
'theme=dark; HttpOnly; Secure; Max-Age=3600'
]);
HttpOnly
:禁止 JavaScript 訪問 Cookie。Secure
:僅允許 HTTPS 傳輸。SameSite=Strict
:阻止 CSRF 攻擊。
?2. 跨域請求如何攜帶 Cookie? ?
?問題?:CORS 請求默認不發(fā)送 Cookie,需顯式配置。
?解決方案?:
?前端配置?(Axios):
axios.get('https://api.example.com/data', {
withCredentials: true
});
?服務(wù)端配置?(Nginx):
add_header 'Access-Control-Allow-Origin' 'https:
add_header 'Access-Control-Allow-Credentials' 'true';
?注意?:Access-Control-Allow-Origin
不能為 *
。
?3. 如何實現(xiàn) Cookie 的自動續(xù)期? ?
?問題?:用戶長時間未操作但保持登錄狀態(tài)。
?解決方案?:
?4. Cookie 與 LocalStorage 如何選擇? ?
?對比?:
?特性? | ?Cookie? | ?LocalStorage? |
---|
?容量? | ≤4KB | ≥5MB |
?自動傳輸? | 是(通過請求頭) | 否 |
?安全性? | 可設(shè) HttpOnly /Secure | 易被 XSS 竊取 |
?適用場景? | 會話管理、身份驗證 | 持久化本地數(shù)據(jù)(如主題設(shè)置) |
?5. 如何防御 Cookie 劫持? ?
?解決方案?:
?SameSite 屬性?:
httpCopy Code
Set-Cookie: sessionId=123
Lax
:允許同站和導航跳轉(zhuǎn)請求攜帶 Cookie。Strict
:完全禁止跨站攜帶7。
?綁定 User-Agent/IP?:
if (req.cookies.token && req.headers['user-agent'] === storedUA) {
}
?注意?:IP 綁定可能誤傷動態(tài) IP 用戶。
?6. 如何實現(xiàn)分布式系統(tǒng)的 Session 共享? ?
?問題?:多臺服務(wù)器需共享用戶會話狀態(tài)。
?解決方案?:
?Redis 集中存儲?(Node.js + Redis):
const session = require('express-session');
const RedisStore = require('connect-redis')(session);
app.use(session({
store: new RedisStore({ host: 'redis-server' }),
secret: 'your-secret',
resave: false
}));
- 所有服務(wù)器從 Redis 讀寫 Session。
?轉(zhuǎn)自https://juejin.cn/post/7503390744385519627
該文章在 2025/5/13 10:20:33 編輯過