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.