NodeJs 服务器设置在端口 XXXX 上,相对路径 GET 域:XXXX/path 而不是 domain/path
NodeJs Server set on port XXXX, relative path GET domain:XXXX/path instead of domain/path
我正在端口 XXXX 上设置服务器,其中包含多个路由渲染 ejs。
在这些 ejs 文件中,我尝试访问具有相对路径的图片(基本上是“../public/images/images.png”),但它说我正在尝试访问域:port/path 而不是 domain/path .
这是我的服务器文件夹的架构:
backend/
- node_modules/
- views/
-- home.ejs
- public/
-- images/
---images.png
const app = express()
app.set('views', './views');
app.set('view engine', 'ejs');
app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, '/public')));
app.use(function (req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
next();
});
app.get('/', function(req, res){
res.render('home');
});
[...]
var httpServer = http.createServer(app);
var httpsServer = https.createServer(options, app);
httpServer.listen(4000);
httpsServer.listen(8443);
文件丢失,因为它是在域中搜索的:port/path(../public/images/images.png 来自 views/home.ejs)
而我想在 domain/path
搜索
尝试使用绝对路径而不是相对路径
change
../public/images/images.png
to
/images/images.png // because you have added line
app.use(express.static(path.join(__dirname, '/public')));
which directly refer to public folder for any of the static files.`
由于我在评论中提到的答案比这里的答案更正确。我会进一步详细说明,以便您对路径绑定有一个清晰的了解。
这应该是你的文件结构:
backend/
- node_modules/
- views/
-- home.ejs
- public/
-- images/
---images.png
-app.js (I supposed it must be here)
Express 不允许开发人员访问 views 文件夹中的文件以访问除 views 文件夹之外的其他文件夹中的任何内容。
app.set('views', './views');
是因为上面这段代码。例如,如果说相对路径可以在页面中使用 Home.ejs 并被呈现,那么攻击者可以轻松地替换图像路径或
中的任何其他路径
"../public/images/images.png" 到 "../app.js"。如果为攻击者定义,这个简单的 hack 将呈现您所有的服务器 javascript 代码,包括分类密钥。
app.use(express.static(path.join(__dirname, '/public')));
public 文件夹 中的任何内容都可以在视图文件夹中使用,无需任何根路径声明。我们可以在 express 中为不同的样式和脚本或图像加入多个或特定路径。
So you should always be careful what static path to include and what
to put inside of them.
我正在端口 XXXX 上设置服务器,其中包含多个路由渲染 ejs。 在这些 ejs 文件中,我尝试访问具有相对路径的图片(基本上是“../public/images/images.png”),但它说我正在尝试访问域:port/path 而不是 domain/path .
这是我的服务器文件夹的架构:
backend/
- node_modules/
- views/
-- home.ejs
- public/
-- images/
---images.png
const app = express()
app.set('views', './views');
app.set('view engine', 'ejs');
app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, '/public')));
app.use(function (req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
next();
});
app.get('/', function(req, res){
res.render('home');
});
[...]
var httpServer = http.createServer(app);
var httpsServer = https.createServer(options, app);
httpServer.listen(4000);
httpsServer.listen(8443);
文件丢失,因为它是在域中搜索的:port/path(../public/images/images.png 来自 views/home.ejs)
而我想在 domain/path
搜索尝试使用绝对路径而不是相对路径
change
../public/images/images.png
to
/images/images.png // because you have added line
app.use(express.static(path.join(__dirname, '/public')));
which directly refer to public folder for any of the static files.`
由于我在评论中提到的答案比这里的答案更正确。我会进一步详细说明,以便您对路径绑定有一个清晰的了解。
这应该是你的文件结构:
backend/
- node_modules/
- views/
-- home.ejs
- public/
-- images/
---images.png
-app.js (I supposed it must be here)
Express 不允许开发人员访问 views 文件夹中的文件以访问除 views 文件夹之外的其他文件夹中的任何内容。
app.set('views', './views');
是因为上面这段代码。例如,如果说相对路径可以在页面中使用 Home.ejs 并被呈现,那么攻击者可以轻松地替换图像路径或
中的任何其他路径"../public/images/images.png" 到 "../app.js"。如果为攻击者定义,这个简单的 hack 将呈现您所有的服务器 javascript 代码,包括分类密钥。
app.use(express.static(path.join(__dirname, '/public')));
public 文件夹 中的任何内容都可以在视图文件夹中使用,无需任何根路径声明。我们可以在 express 中为不同的样式和脚本或图像加入多个或特定路径。
So you should always be careful what static path to include and what to put inside of them.