讲师中心 微信公众号
AI工具推荐 视频效率加速

javascript的web storageapi有何限制_如何处理存储空间和安全性问题【教程】

雨明君_5790

雨明君_5790

发布时间:2026-01-16 17:08:02

|

405人浏览过

|

来源于php中文网

原创

Web Storage容量为5–10MB但按UTF-16字节计算,中文字符占2字节;严禁存储敏感信息,因其明文存于本地且易受XSS窃取;sessionStorage与localStorage安全差异极小;超2MB或需查询时应改用IndexedDB或服务端存储。

javascript的web storageapi有何限制_如何处理存储空间和安全性问题【教程】

Web Storage 的容量限制和实际可用空间

大多数浏览器对 localStorage 和 sessionStorage 的单源(origin)配额是 5–10 MB,但这个值不是固定标准,而是由浏览器动态分配的。Chrome 实际常给约 6.5 MB,Firefox 约 10 MB,Safari 在 iOS 上甚至低至 2.5 MB 且会主动清理空闲数据。

关键点在于:这个“限制”是按字符串 UTF-16 编码字节数计算的,不是字符数。一个中文字符占 2 字节,JSON.stringify() 后的双引号、逗号、空格都会计入。你存一个 4 MB 的对象,可能调用 localStorage.setItem('key', JSON.stringify(obj)) 就直接抛出 QuotaExceededError。

  • 写入前先估算:
    function estimateSize(obj) {
      return new Blob([JSON.stringify(obj)]).size;
    }
  • 捕获异常并降级:用 try...catch 包裹 setItem,失败后可尝试压缩(JSON.stringify(obj, null, 0) 去空格)、删旧键、或 fallback 到 IndexedDB
  • 不要依赖 localStorage.length 或遍历 localStorage.key(i) 来“清空所有”,这在大容量下性能极差;改用明确的 key 命名约定(如加前缀 myapp:cache:)再逐个移除

localStorage 为什么不能存敏感信息

localStorage 是纯前端同步 API,数据以明文形式存在用户本地磁盘文件中(例如 Chrome 的 Local Storage/ 目录),任何能访问该浏览器 profile 的人,或已注入脚本的页面(XSS),都能立刻读取全部内容。

它不参与 HTTPS 加密传输,也不受 CSP 的 script-src 限制——只要脚本能运行,就能调用 localStorage.getItem()。所以:

立即学习“Java免费学习笔记(深入)”;

dmap-jsapi-skill
dmap-jsapi-skill

DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。

下载
  • 绝对不要存 token、密码、身份证号、支付信息等原始敏感字段
  • 即使加密后存入,密钥若硬编码在 JS 里,等于没加密(攻击者可直接解密)
  • OAuth refresh_token 同样不行——它本就应由后端保管,前端只持短期 access_token,且应存在内存变量中,页面刷新即丢

sessionStorage 与 localStorage 的安全差异其实很小

很多人误以为 sessionStorage 更安全,因为它随标签页关闭而销毁。但现实是:只要页面还在运行,它的数据和 localStorage 一样可被同源任意脚本读写;而且它不支持跨标签页共享,反而导致开发者为绕过限制而把数据塞进 URL 或 postMessage,引入新风险。

真正有意义的区分点只有生命周期,而非保密性:

  • sessionStorage 适合临时状态:表单草稿、向导步骤、未提交的筛选条件
  • localStorage 适合用户偏好:主题色、语言、折叠面板状态
  • 两者都不该用于身份凭证缓存。需要持久化登录态,请用 HttpOnly + Secure 的 cookie 配合后端 session 管理

替代方案:什么时候该换 IndexedDB 或服务端存储

当你要存结构化数据、二进制 blob、超过几 MB、或需要事务/查询能力时,localStorage 就到头了。它只有字符串键值对,没有索引、无事务、阻塞主线程。

简单判断逻辑:

  • 数据 > 2 MB 或含图片 base64 → 用 IndexedDB(配合 idb 库降低复杂度)
  • 需多设备同步(如笔记、待办)→ 必须走服务端,前端只做离线缓存(用 Cache API + Service Worker)
  • 要防用户手动篡改 → 没有前端方案,只能校验(如签名校验 JSON 内容哈希)+ 关键逻辑放服务端

最后提醒一句:Web Storage 不是数据库,也不是加密保险箱。它的设计目标只是“轻量、快速、同源、客户端暂存”。越清楚这点,越不容易把它用错地方。

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2115

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3202

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1076

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

3639

2025.09.10

chrome什么意思
chrome什么意思

chrome是浏览器的意思,由Google开发的网络浏览器,它在2008年首次发布,并迅速成为全球最受欢迎的浏览器之一。本专题为大家提供chrome相关的文章、下载、课程内容,供大家免费下载体验。

2686

2023.08.11

chrome无法加载插件怎么办
chrome无法加载插件怎么办

chrome无法加载插件可以通过检查插件是否已正确安装、禁用和启用插件、清除插件缓存、更新浏览器和插件、检查网络连接和尝试在隐身模式下加载插件方法解决。更多关于chrome相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

5219

2023.11.06

Chrome开启无痕模式
Chrome开启无痕模式

本专题整合了Chrome无痕模式开启相关内容,阅读专题下面的文章了解更多详细教程。

3727

2026.03.24

c语言中null和NULL的区别
c语言中null和NULL的区别

c语言中null和NULL的区别是:null是C语言中的一个宏定义,通常用来表示一个空指针,可以用于初始化指针变量,或者在条件语句中判断指针是否为空;NULL是C语言中的一个预定义常量,通常用来表示一个空值,用于表示一个空的指针、空的指针数组或者空的结构体指针。

549

2023.09.22

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

0

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.2万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn