我有一个 node.js webapp,我需要在其中以安全的方式连接两条路径。第一个(最左边)是一个常数,第二个(最右边)与第一个相关,来自不受信任的用户输入。生成的路径应该低于第一条路径。所以情况是这样的:
path1 = "public/html"; // Hardcoded path.
path2 = req.query.path; // Untrusted user input.
result = safePathJoin(path1, path2); // Result can be e.g. public/html/index.htm,
// but never private/config.xml
我需要的是safePathJoin()
对目录遍历攻击安全的功能。我的第一个天真的方法是这样的:
safePathJoin = function(path1, path2) {
path1 = path.normalize(path1);
var result = path.join(path1, path2);
return result.startsWith(path1) ? result : undefined;
}
这够好吗?有没有标准的方法来做到这一点?有什么建议?