const urlRE = /(\?|&)url(?:&|$)/;
const rawRE = /(\?|&)raw(?:&|$)/;
function ensureServingAccess(url, server, res, next) {
if (isFileServingAllowed(url, server)) {
return true;
}
if (isFileReadable(cleanUrl(url))) {
const urlMessage = `The request url "${url}" is outside of Vite serving allow list.`;
const hintMessage = `
${server.config.server.fs.allow.map((i) => `- ${i}`).join("\n")}
Refer to docs https://vitejs.dev/config/server-options.html#server-fs-allow for configurations and more details.`;
server.config.logger.error(urlMessage);
server.config.logger.warnOnce(hintMessage + "\n");
res.statusCode = 403;
res.write(renderRestrictedErrorHTML(urlMessage + "\n" + hintMessage));
res.end();
} else {
next();
}
return false;
}
function isFileServingAllowed(url, server) {
if (!server.config.server.fs.strict) return true;
const file = fsPathFromUrl(url);
if (server._fsDenyGlob(file)) return false;
if (server.moduleGraph.safeModulesPath.has(file)) return true;
if (server.config.server.fs.allow.some(
(uri) => isSameFileUri(uri, file) || isParentDirectory(uri, file)
))
return true;
return false;
}
function isFileReadable(filename) {
if (!tryStatSync(filename)) {
return false;
}
try {
fs__default.accessSync(filename, fs__default.constants.R_OK);
return true;
} catch {
return false;
}
}
没有评论