由于JSON.parse()
不会在要解析的数据中运行任何代码,因此它并不容易受到攻击eval()
,但是您仍然应该做一些事情来保护服务器和应用程序的完整性,例如:
- 在适当的地方应用异常处理程序
JSON.parse()
可以引发异常。
- 不要假设那里有什么数据,您必须在使用之前明确测试数据。
- 仅处理您专门寻找的属性(避免可能在 JSON 中的其他内容)。
- 将所有传入数据验证为合法、可接受的值。
- 清理数据长度(以防止数据过大导致 DOS 问题)。
- 不要将这些传入数据放在可以进一步评估的地方,例如直接放入页面的 HTML 或直接注入到 SQL 语句中,而无需进一步清理以确保它对于该环境是安全的。
因此,要直接回答您的问题,“是的”除了使用 body-parser 之外,还有更多工作要做,尽管它是第一次处理数据的完美前线。从 body-parser 获取数据后,下一步如何处理数据在许多情况下都很重要,并且可能需要格外小心。
例如,下面是一个解析函数,它需要一个具有应用其中一些检查的属性的对象,并为您提供仅包含您期望的属性的过滤结果:
// pass expected list of properties and optional maxLen
// returns obj or null
function safeJSONParse(str, propArray, maxLen) {
var parsedObj, safeObj = {};
try {
if (maxLen && str.length > maxLen) {
return null;
} else {
parsedObj = JSON.parse(str);
if (typeof parsedObj !== "object" || Array.isArray(parsedObj)) {
safeObj = parseObj;
} else {
// copy only expected properties to the safeObj
propArray.forEach(function(prop) {
if (parsedObj.hasOwnProperty(prop)) {
safeObj[prop] = parseObj[prop];
}
});
}
return safeObj;
}
} catch(e) {
return null;
}
}