知识卡片

安全解析JSON

普通读书笔记卡 · 1501.b.1

内容

用 eval 解析 JSON 文本有严重安全隐患:即使数据来自同源服务器,只要该服务器有漏洞(拼凑字符串生成JSON或未经校验转发),就可能发送夹带恶意代码的文本,eval 会当代码执行。应改用 JSON.parse:遇危险内容抛异常而非执行,彻底分开解析数据与执行代码。关联:[[eval扩大攻击面]];发散:JSON.parse 不替代 schema、白名单和业务校验。

参考来源

- 位置:《JavaScript语言精粹(修订版)》附录E《JSON》"安全地使用JSON"一节 - 结论依据:原文对比 `eval` 解析 JSON 的风险("有漏洞的服务器或许并不能正确地对JSON进行编码……那么它可能在无意间发送了危险的数据")与 `JSON.parse` 的行为("如果文本中包含任何危险数据,那么JSON.parse将抛出一个异常"),并明确建议"总是用JSON.parse来替代eval",据此推出应使用专门解析器而非 eval 的结论;同时原书本身未声称 JSON.parse 能替代业务校验,因此补充这一限定以避免过度引申。 - 原始内容:使用JSON.parse方法替代eval就能避免这种危险。如果文本中包含任何危险数据,那么JSON.parse将抛出一个异常。为了防止服务器出现漏洞的状况,我推荐你总是用JSON.parse来替代eval。