安全解析json需捕获异常、限制结构、验证类型:用try...catch防崩溃,检查非null、纯对象、原型未污染,过滤敏感字段,并结合schema校验语义合法性。

直接用 JSON.parse 解析不可信文本有风险,可能抛出语法错误甚至被恶意利用(比如配合 __proto__、constructor 等特殊字段触发原型污染)。安全解析的核心是:**捕获异常 + 限制结构 + 验证类型**。
用 try...catch 捕获解析失败
这是最基本的安全措施。未加保护的 JSON.parse 遇到非法 JSON 会直接抛出 SyntaxError,导致程序中断。
- 始终包裹在
try...catch中,避免崩溃 - 不要依赖
typeof result === 'object'判断成功,因为null也是'object' - 建议返回
null或undefined表示失败,便于后续判断
验证解析结果是否为纯对象(非 null、非数组、无原型污染风险)
即使解析成功,也可能得到意外类型(如 null、数组、原始值),或被构造出带危险属性的对象。
- 检查
result !== null && typeof result === 'object' && !Array.isArray(result) - 用
Object.getPrototypeOf(result) === Object.prototype确保没篡改原型(防止"__proto__": {...}注入) - 可选:递归遍历键名,过滤掉
__proto__、constructor、prototype等敏感字段
结合 schema 校验做语义层面防护
语法合法 ≠ 数据可用。比如 API 返回 {"id": "abc"},但业务需要 id 是数字。
- 用轻量库如
ajv或手写校验函数检查字段类型、必填项、范围等 - 对关键字段(如用户 ID、金额、URL)做白名单校验或正则约束
- 避免直接把解析结果传给
eval、Function、innerHTML等高危操作
更稳妥的做法:封装一个安全解析函数
把上述逻辑收拢成可复用的工具函数,减少重复出错。
- 输入:待解析字符串、可选的校验回调
- 内部先
try...catch解析,再检查对象纯净性,最后执行自定义校验 - 失败时统一返回
null,不抛错,由调用方决定降级策略(如默认值、重试、上报)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











