【问题标题】:Write on file of another server写入另一台服务器的文件
【发布时间】:2016-09-16 13:22:17
【问题描述】:

我在Server1 上有一个名为Sitemap.xml 的文件,我想从另一台服务器Server2 写入该文件。

Server1的文件结构

服务器1:

  • 应用程序
  • 观看次数
  • 公开
  • sitemap.xml
  • app.js

Sitemap 可以通过 Server1/sitemap 访问,因为我在我的 express 文件中使用了以下代码

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

【问题讨论】:

  • 你能想象如果你能简单地做到这一点吗?这意味着任何人都可以远程修改您的文件!您需要做的是在服务器 1 上创建一个 API,例如 /changeSitemap 并让 server2 调用它
  • 实际上,我不想公开我的后端 API,这就是为什么我试图从 Server1 上的 Server2 修改文件
  • 如果你能那样做那就更糟糕了哈哈而且你可以随时检查呼叫是否来自Server2!

标签: node.js express routing


【解决方案1】:

您应该使用秘密令牌保护路由以避免暴露。希望这会对您有所帮助:

// Server 1
const fs = require('fs');

app.use(function(req, res, next) {
  var secret = req.headers.hasOwnProperty('authorization')
    ? req.headers.authorization
    : false;

  if (! secret || secret !== 'token [your-secret-token]') {
    res.status(403).send('Access forbidden');
  }

  // Create write stream to sitemap file
  var stream = fs.createWriteStream('sitemap.xml');

  // Redirect request body to stream which writes to sitemap file
  req.pipe(stream)
  .on('end', () => res.send('ok'));
});


// Server 2

const http = require('http');
const fs = require('fs');

var stream = fs.createReadStream('new-sitemap.xml');

var req = http.request({
  host: 'server1',
  headers: {
    authorization: 'token [your-secret-token]',
  },
});

req.on('response', (res) => {
  if (res.status === 200) {
    console.log('File uploaded');
  }
  else {
    console.error('File not loaded');
  }
});

// Write data from file into request body
stream.pipe(req);

请注意,令牌的长度应至少为 32 个字符才能足够强大。并且不要忘记不时更新它。这也是一个概念。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 2019-01-24
    • 2011-11-05
    • 1970-01-01
    • 2012-01-25
    • 2023-03-06
    • 2020-04-14
    相关资源
    最近更新 更多