JavaScript 解析JSON必须用JSON.parse()而非eval()以防XSS,生成时需处理循环引用和不可序列化值,解析前应校验数据来源与类型,大数据量需流式解析或懒加载。

JavaScript 解析和生成 JSON 主要靠内置的 JSON.parse() 和 JSON.stringify(),它们快、标准、无需依赖,但用错容易引发安全漏洞或性能问题。
JSON.parse() 是唯一安全可靠的解析方式。它严格校验 JSON 格式,拒绝执行任意代码;而 eval() 或构造函数方式会执行字符串中的 JavaScript 表达式,存在严重 XSS 和代码注入风险。
const data = JSON.parse('{"name":"Alice","age":30}');
eval('{"name":"Alice", "age":30}'); // 可能执行恶意语句
JSON.stringify() 会跳过函数、undefined、Symbol 类型,遇到循环引用直接抛错(TypeError: Converting circular structure to JSON)。
replacer 参数过滤敏感字段或转换值,例如:JSON.stringify(obj, ['name', 'email'])
flatted 或自定义 replacer 检测并替换if (value instanceof Date) return value.toISOString();
前端解析的 JSON 数据来源必须可信。即使来自自家 API,也应假设传输中可能被篡改(如中间人攻击、CDN 缓存污染)。
立即学习“Java免费学习笔记(深入)”;
if (typeof data.id !== 'number') throw new Error('Invalid id');
innerHTML),防止 XSS;优先用 textContent 或模板引擎做转义解析 10MB 以上 JSON 可能阻塞主线程数秒,导致页面卡死;频繁 stringify 大对象也会触发大量内存分配。
stream-json)或分页/懒加载结构JSON.stringify() 相同对象;必要时缓存字符串结果structuredClone(),现代浏览器支持)而非 JSON 序列化反序列化,后者丢失原型、函数、undefined 等且更慢不复杂但容易忽略。用对 API、守住数据边界、量级上来时换方案,JSON 就很稳。
以上就是javascript如何解析和生成JSON_有哪些安全和性能注意事项?的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号