虽然 JSON 本身是安全的,但不当处理可能引入安全漏洞。以下是需要注意的事项和保持安全的方法。
JSON 注入
永远不要通过字符串拼接用户输入来构建 JSON。始终使用正确的序列化:
// ❌ 危险
const json = '{"name":"' + userInput + '"}';
// ✅ 安全
const json = JSON.stringify({ name: userInput });
JSON 劫持
旧版浏览器容易通过数组字面量进行 JSON 劫持。现代浏览器已修复此问题,但始终在 API 响应的顶层返回对象(而非数组)。
通过大型负载进行拒绝服务攻击
恶意用户可以发送极大的 JSON 耗尽内存:
原型污染
使用 eval() 解析不受信任的 JSON 可能导致原型污染。始终使用 JSON.parse():
// ❌ 永远不要这样做
const obj = eval('(' + jsonString + ')');
// ✅ 始终使用 JSON.parse
const obj = JSON.parse(jsonString);
Content-Type 头
始终设置正确的 Content-Type 头:
Content-Type: application/json
这可以防止浏览器将 JSON 响应解释为 HTML 或脚本。
使用我们的 JSON 查看器 在浏览器中安全检查 JSON 数据。