Web 开发中的 Cookie 正确实践:原理、安全与代码实现

Cookie 是 Web 开发中最古老也最容易被误用的技术之一。很多开发者习惯将它视为某种通用的“本地存储”,随意向其中塞入大量数据,或者完全忽略了其传输机制中的安全隐患。这种做法不仅会拖慢每一次 HTTP 请求的速度,更会给应用程序留下致命的安全漏洞。

Cookie 的本质非常单一:它是一段由服务器发送并存储在用户浏览器中的小型文本数据,其唯一目的是在无状态的 HTTP 协议之上维持状态。除此之外的任何用途,都应当优先考虑 LocalStorage 或 IndexedDB。

核心机制:HTTP 头部的交互

理解 Cookie 的第一步是抛弃前端 API 的表象,直接观察 HTTP 协议本身。Cookie 并非某种神奇的浏览器魔法,它仅仅是 HTTP 头部(Header)的一字段。当服务器希望在客户端存储信息时,会在响应头中包含Set-Cookie。浏览器接收到响应后,会在后续对该域名的每一次请求中,自动通过Cookie请求头将这些数据带回服务器。

这种机制决定了 Cookie 的性能成本。如果你在 Cookie 中存储了 4KB 的数据,那么用户的每一次页面刷新、每一个 AJAX 请求、甚至每一张图片的加载,都会多消耗 4KB 的上传流量。在一个高并发的生产环境中,这是一种不可接受的资源浪费。

MDN Web Docs (HTTP Cookies):https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies

安全基石:三个至关重要的标志

绝大多数关于 Cookie 的安全事故,都是因为开发者忽略了三个核心属性:HttpOnlySecureSameSite

如果你的应用涉及用户登录状态,必须启用HttpOnly。这个标志禁止 JavaScript 通过document.cookie访问 Cookie 数据。即使攻击者成功在你的网站上注入了恶意脚本(XSS 攻击),由于无法读取 Cookie,他们也无法窃取用户的会话令牌。这是防御 XSS 劫持账户最有效的一道防线。

Secure标志则强制浏览器仅在 HTTPS 加密连接中发送 Cookie。如果没有这个标志,当用户在公共 Wi-Fi 下访问你的站点时,Cookie 可能会以明文形式在网络中传输,极易被中间人拦截。

SameSite属性用于防御跨站请求伪造(CSRF)。通过将其设置为StrictLax,浏览器会限制第三方站点发起的请求携带 Cookie。这意味着即使诱导用户点击了恶意链接,攻击者也无法利用用户的登录状态执行敏感操作,因为 Cookie 根本不会被发送。

现代浏览器已经开始默认将 SameSite 设置为 Lax,但这并不意味着开发者可以高枕无忧。显式地声明这些策略是专业开发的底线。

客户端实现方案

虽然原生 JavaScript 提供了document.cookie接口,但其设计极为糟糕,本质上只是一个包含所有 Cookie 的长字符串,需要开发者手动解析。在现代前端开发中,应当封装一个健壮的工具类来处理这些操作,确保编码(Encoding)和格式的正确性。

以下是一个标准化的 Cookie 操作工具对象。

constCookieManager={set:function(name,value,days=7,path='/'){letexpires="";if(days){constdate=newDate();date.setTime(date.getTime()+(days*24*60*60*1000));expires="; expires="+date.toUTCString();}document.cookie=name+"="+(encodeURIComponent(value)||"")+expires+"; path="+path+"; SameSite=Lax";},get:function(name){constnameEQ=name+"=";constca=document.cookie.split(';');for(leti=0;i<ca.length;i++){letc=ca[i];while(c.charAt(0)===' ')c=c.substring(1,c.length);if(c.indexOf(nameEQ)===0)returndecodeURIComponent(c.substring(nameEQ.length,c.length));}returnnull;},erase:function(name){document.cookie=name+'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';}};

服务端实现方案(PHP)

在处理敏感数据(如会话 ID)时,服务端设置 Cookie 永远优于客户端。服务端可以直接控制HttpOnly属性,从而从根本上切断客户端脚本的访问路径。

现代 PHP 版本(7.3+)提供了一种更安全、更易读的数组参数语法来设置 Cookie,这避免了旧版本中参数顺序混乱的问题,并且原生支持SameSite属性配置。

PHP Manual (setcookie):https://www.php.net/manual/en/function.setcookie.php

以下代码展示了如何在后端创建一个高安全性的会话 Cookie。

<?php$cookie_name="user_session";$cookie_value="xy78-secure-token-abc";$expiry_time=time()+(86400*30);$path="/";$domain="yourdomain.com";$is_secure=true;$is_httponly=true;setcookie($cookie_name,$cookie_value,['expires'=>$expiry_time,'path'=>$path,'domain'=>$domain,'secure'=>$is_secure,'httponly'=>$is_httponly,'samesite'=>'Strict']);$session_token=$_COOKIE[$cookie_name]??null;if($session_token){echo"Cookie valid.";}else{echo"No valid session cookie found.";}?>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1141227.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

node.js基于vue的校园社交活动影视评价网站_eve40547_ Django

文章目录项目概述核心功能技术实现创新点应用场景项目技术介绍开发工具和技术简介nodejs类核心代码部分展示结论源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;项目概述 Node.js与Vue.js构建的校园社交活动影视评价网站是一个融合社交…

【VSCode IDE】为什么程序员偏爱?深度解析核心原因

文章目录前言一、轻量高效&#xff1a;性能无妥协的基础体验二、插件生态&#xff1a;按需扩展的无限可能三、全场景适配&#xff1a;跨平台与远程开发的革命四、开发体验&#xff1a;细节处的效率革命五、AI赋能与持续迭代&#xff1a;紧跟技术趋势六、开源免费&#xff1a;无…

2026必备!8个AI论文网站,助本科生轻松搞定毕业论文!

2026必备&#xff01;8个AI论文网站&#xff0c;助本科生轻松搞定毕业论文&#xff01; AI 工具&#xff0c;让论文写作不再难 随着人工智能技术的不断进步&#xff0c;越来越多的本科生开始借助 AI 工具来辅助完成毕业论文。尤其是在当前 AIGC&#xff08;人工智能生成内容&am…

通信原理篇---数字通信系统与模拟通信系统

一、数字通信系统的发展趋势模拟通信系统&#xff08;Analog Communication Systems&#xff09;是最早发展起来的通信方式&#xff0c;直接传输连续的模拟信号&#xff08;如语音的声波、图像的亮度变化&#xff09;。数字通信系统&#xff08;Digital Communication Systems&…

通信原理篇---AM广播的优势

简单直接的答案是&#xff1a;AM广播的广泛使用&#xff0c;并非因为它在技术上优于SSB&#xff0c;而是因为它在特定应用场景下&#xff0c;构建了一个难以被替代的、成本极低且高度成熟的“生态位”。下面我们从技术层面和设备成本展开详细讨论。一、技术层面&#xff1a;AM的…

【波束成形】5G波束成形与雷达共存【含Matlab源码 14903期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;Matlab武动乾坤博客之家&#x1f49e;…

【雷达检测】毫米波雷达的生命体征信号监测【含Matlab源码 14905期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;Matlab武动乾坤博客之家&#x1f49e;…

【雷达检测】基于matlab毫米波雷达的生命体征信号监测【含Matlab源码 14905期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…

【雷达检测】基于matlab小波变换雷达探测【含Matlab源码 14905期】含报告

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到海神之光博客之家&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49…

【雷达检测】小波变换雷达探测【含Matlab源码 14905期】含报告

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;Matlab武动乾坤博客之家&#x1f49e;…

【雷达跟踪】雷达多目标跟踪POMCPOW资源调度仿真【含Matlab源码 14906期】

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;&#x1f49e;Matlab武动乾坤博客之家&#x1f49e;…

Git 使用指南

一、Git 基础概念 1.1 Git 简介 Git 是一个分布式版本控制系统&#xff0c;由 Linus Torvalds 于2005年创建&#xff0c;用于管理 Linux 内核开发。它旨在处理从小型到大型项目的快速和高效版本控制。 1.2 Git 的核心特点 分布式&#xff1a;这是 Git 与旧系统&#xff08;如 S…

深度测评10个AI论文写作软件,助本科生轻松搞定论文!

深度测评10个AI论文写作软件&#xff0c;助本科生轻松搞定论文&#xff01; 1.「千笔」—— 一站式学术支持“专家”&#xff0c;从初稿到降重一步到位&#xff08;推荐指数&#xff1a;★★★★★&#xff09; 在众多AI论文写作工具中&#xff0c;「千笔」无疑是一款备受推崇的…

线段树二分

lc2286线段树二分class BookMyShow {int n, m;vector<int> mn;vector<long long> sum;// 把下标 i 上的元素值增加 valvoid update(int o, int l, int r, int i, int val) {if (l r) {mn[o] val;sum[o] val;return;}int m (l r) / 2;if (i < m) {update(o …

windows clion MingW cmake 编译运行 FreeRTOS

说明 在 windows 平台上&#xff0c;使用 clion IDE&#xff0c;cmake 方式编译 FreeRTOS&#xff0c;编译工具链使用 MingW gcc 下载 FreeRTOS可以只下载 FreeRTOS-Kernel&#xff0c;也可以下载整个 FreeRTOS&#xff08;包括 git 子模块&#xff0c;体积较大&#xff09;htt…

构建高并发AI服务网关:C++与gRPC的工程实践

随着AI服务在企业中的规模化部署&#xff0c;如何高效、可靠地将多个异构AI模型集成到统一的服务架构中&#xff0c;成为后端工程师面临的重要挑战。本文介绍基于C与gRPC构建高并发AI服务网关的完整实践方案&#xff0c;涵盖架构设计、性能优化、容错机制等关键环节。 1. 问题背…

Java后端实习高频考点深度解析:美团27届后端开发二面全真复盘(限流·负载均衡·消息队列·链表分割)

Java后端实习高频考点深度解析&#xff1a;美团27届后端开发二面全真复盘&#xff08;限流负载均衡消息队列链表分割&#xff09; 阅读建议&#xff1a;本文适合准备大厂后端实习/校招的同学精读&#xff0c;建议配合动手实践与源码阅读&#xff0c;效果更佳。 在竞争日益激烈的…

AI 技能工程入门:从独立能力到协作生态

随着大型语言模型&#xff08;LLM&#xff09;能力的飞速发展&#xff0c;如何让它们稳定、高效地执行复杂任务&#xff0c;已成为AI工程化的核心挑战。作为应对&#xff0c;“技能”&#xff08;Skills&#xff09; 作为一种新兴的AI能力封装范式应运而生&#xff0c;而由其引…

提示工程架构实战:小样本场景下的模型压缩方案

提示工程架构实战:小样本场景下的模型压缩方案设计与落地 摘要/引言:小样本时代,我们需要怎样的模型压缩? 你有没有遇到过这样的困境? 为了做一个移动端的图像分类应用,你选了轻量级模型ViT-Tiny,但用5张图/类的小样本数据训练后,准确率勉强到70%;想再压缩模型大小(…

蟑螂的种类与预防方法

冬天来了&#xff0c;温度降到10以下&#xff0c;蚊子不见了&#xff0c;但是蟑螂却到处横行。有时候&#xff0c;打开包裹&#xff0c;或者移动沙发&#xff0c;突然窜出黄色的小颗粒&#xff0c;仔细一看&#xff0c;原来是蟑螂。这里介绍蟑螂的种类与预防方法。图(1) 蟑螂的…