【问题标题】:ExpressJS restricting access to public filesExpressJS 限制对公共文件的访问
【发布时间】:2015-12-18 00:25:40
【问题描述】:

有没有办法隐藏 Node 服务器提供的文件?我试图重新路由某些文件和目录,但在 Express 4.X 中没有任何效果。我还尝试在请求某些文件时发送 4XX HTTP 响应,但这仅适用于目录路径。无论我做什么,如果有一个文件正在由 Node 提供服务,那么用户将能够看到源代码。这就是 Express 的工作方式吗?它是否意味着成为生产框架之上的开发框架?

现在我正在尝试发送错误的回复。

完整的 server.js

var path = require('path'),
   express = require('express'),

var app = express();

app.use('/', express.static(__dirname));
app.use('/', express.static('dist'));

// not working
app.get('/client/config/app.js', function(req, res) {
   res.sendStatus(400);
});

app.listen(3001, function() {
   console.log('listening');
});

如果我指定目录路径,我可以发送响应,但如果我指定完整文件路径,则不能。这有效:

app.get('/client/config/', function(req, res) {
   res.sendStatus(400);
});

这不是:

app.get('/client/config/app.js', function(req, res) {
   res.sendStatus(400);
});

我也尝试过使用app.use 进行路由。那也没有用。

“隐藏”源代码我现在能做的最好的事情就是用 Gulp 丑化它,但我想用 JS 美化器很容易解开它。

【问题讨论】:

  • 嗯,所以问题是用户可以查看 Node 提供的任何文件的来源?如果是这样,这就是它的工作方式,无论您使用哪种服务器端语言,这就是网络的一般工作方式。发送给客户端的任何内容,客户端都可以读取吗?
  • 对于根本不应该对客户端可见的文件,您只需将它们放在不属于您的公用文件夹的文件夹中?
  • 嗯...有没有办法限制访问?如果我不希望用户看到我的 JavaScript 源代码怎么办?这不可能实现吗?
  • 这取决于,用户根本不应该看到您的服务器端代码,但是应该在浏览器中运行的 javascript 不能被隐藏。

标签: javascript node.js express


【解决方案1】:

单线罪魁祸首

app.use('/', express.static(__dirname));

那条线说它可以拉任何东西。您可以将其替换为:

app.use('/', express.static(__dirname + '/public'));

然后将内容放入您要查看的公共目录中。对于您希望优先考虑的路线,请将它们放在其他声明之前。所以你会放置:

app.get('/client/config/app.js', function(req, res) {
 res.sendStatus(400);
});

高于一切。但是,如果您只解决第一个问题,似乎您可能不需要它,那么您很好。另请参阅 HTTP 状态代码。对于该类型的文件,您可能需要 404 或 403。

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

【讨论】:

  • app.use 之前澄清app.get 有帮助。 @adenao 还帮助消除了我的一些困惑。我应该在我的问题中更清楚地说明我知道如何使用 EJS 来限制对某些文件的访问。我只是想知道是否可以限制对正在服务的文件(公共文件)的源代码的访问,但这似乎是不可能的。我想我只需要从我的客户端提取一些工作到服务器。
  • @Sudo 有一个非常酷的工具叫做 git,你应该“检查”你的源文件困境。如果可以避免的话,我认为这样做并不是公开源文件的最佳方法。
猜你喜欢
  • 1970-01-01
  • 2011-08-06
  • 2020-07-01
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
  • 1970-01-01
  • 2017-01-29
  • 1970-01-01
相关资源
最近更新 更多