有没有办法我只能从节点js脚本访问.json文件,并防止使用URL直接访问?

时间:2019-02-20 06:21:19

标签: android node.js security nginx server

我正在使用nginx服务器,正在创建一个android应用,它在服务器上使用json文件以实现特定功能,现在,如果我从其URL访问此json文件,则会在浏览器中打开它,我希望它只能从我的应用程序访问,因为它包含一些重要信息,我知道jwt令牌,我想到了将它与node js一起使用以获取文件的内容,但仍然可以通过其URL访问文件,无论如何可以预防吗?

我想要的另一个技巧是,从节点js访问json文件是好事,还是考虑到服务器负载,直接访问json文件更有效

任何帮助将不胜感激,在此先感谢

1 个答案:

答案 0 :(得分:0)

您应该将json文件移到nginx根目录之外,这样没人可以单独通过url访问它。

例如,如果这是您计算机的目录。

my-project/
  src/
    index.js
  public/ # nginx root dir  
    file.json # move this outside of public/
  private/
    file.json # you can move it here

在那之后,您可以使用JWT保护将用于json文件的路由。这是express docs的示例。 https://expressjs.com/en/api.html#res.sendFile


app.use(jwtMiddleware) // google for "express jwt middleware"

app.get('/file/:name', function (req, res, next) {

  var options = {
    root: __dirname + '/path/to/jsonfile',
    dotfiles: 'deny',
    headers: {
        'x-timestamp': Date.now(),
        'x-sent': true
    }
  };

  var fileName = req.params.name;
  res.sendFile(fileName, options, function (err) {
    if (err) {
      next(err);
    } else {
      console.log('Sent:', fileName);
    }
  });

});
  

我想要的另一个技巧是,从节点js访问json文件是好事,还是考虑到服务器负载,直接访问json文件更有效

如果您的JSON文件是公开的,那么让nginx提供它是有意义的。但是,您的json文件需要身份验证,并且该逻辑在node中而不是nginx易于实现。