禁用Express Node服务器中的文件访问

5

我有一个运行在CentOS上的node服务器,目前,你可以直接进入根目录中的任何文件并查看它,例如xxx.net/whatever.js。显然,这并不好,因为我在某些文件中有一些敏感信息。

如何禁止用户从浏览器导航到这些文件?

我设置了一个apache代理来查看网站,就像这样

<VirtualHost *:80>
  ServerAdmin me@xxx.net
  ServerName www.xxx.net
  ServerAlias xxx.net

  DocumentRoot /var/www/xxx.net
  <Directory /var/www/xxx.net>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride All
    Order allow,deny
    allow from all
  </Directory>

  ErrorLog /var/www/xxx.net/error.log
  CustomLog /var/www/xxx.net/requests.log combined

  ProxyRequests Off
  ProxyPreserveHost On
  ProxyVia Full
  <Proxy *>
   Require all granted
  </Proxy>

  <Location />
    ProxyPass http://127.0.0.1:4000/
    ProxyPassReverse http://127.0.0.1:4000/
  </Location>
</VirtualHost>

然后是pm2运行的一个express node服务器。我尝试了各种chmod,但没有任何改变。如果有人能解决我的问题,那就太好了。如果您需要更多信息,请让我知道,谢谢!

1个回答

9
您可以使用Express JS限制访问。
当这样写时:
app.use('/', express.static(__dirname));

这意味着可以访问任何内容。 您可以使用以下方法将此访问权限限制为仅限于某些文件夹。
app.use('/', express.static(__dirname + '/public'));

或者您可以在Express中编写中间件,其中包含您想要阻止的文件路由列表。
    app.use(function (req, res, next) {
        if(!checkFunction(req.url)) {
            next();
        } else {
            res.send(404, "Not found");
        }
    })

    var checkFunction(url){
       var blockedUrl = ['folder/file1.js'];

       return blockedUrl.find(function(urlCheck){
            return urlCheck === url;
       })
    }

我以前肯定使用过公共文件夹版本...这次我计划只生成HTML网站,但最后一刻决定保持动态...所以我没有使用公共文件夹。但我一定会尝试checkFunction技术!非常感谢您提供的示例。 - Shan Robertson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接