【问题标题】:base64 encode image host url or server file pathbase64 编码图像主机 url 或服务器文件路径
【发布时间】:2015-08-14 13:37:38
【问题描述】:

当我将图像数据编码为 base64 字符串时,我使用服务器文件路径通过fs.readFile() 获取图像数据。我有一个问题:这是否意味着其他人可以解码 base64 字符串,然后从编码数据中获取服务器路径,如下所示?

...
fs.readFile(destinationFilePath, function(error, data){
  fulfill(data.toString('base64'));
});

我不想泄露我的服务器路径,所以我也尝试像下面的代码一样对主机 url 进行编码,我不确定这种使用 base64 的正确方法吗?我没有收到任何错误,但也没有收到任何回复 - 我错过了什么吗?

var base64EncodeData = function(destinationFilePath) {
  return new Promise(function (fulfill, reject){
      var request = require('request').defaults({ encoding: null });
      request.get(destinationFilePath, function (error, response, body) {
        if (!error && response.statusCode == 200) {
          data = "data:" + response.headers["content-type"] + ";base64," + new Buffer(body).toString('base64');
          console.log(data);
          fulfill(data);
        }
      });
  });
};

【问题讨论】:

  • 如果您对这样的任何内容进行编码,您可以复制路径加密并对其进行解码。如果您在 google 上查找,您会发现许多可以编码/解码的网站。如果出于某种原因有人想要找到路径,它可以在几秒钟内完成。 base64decode.org

标签: javascript node.js express base64


【解决方案1】:

您不会通过 base64 编码图像泄漏您的服务器路径。您生成的 base64 仅包含二进制图像数据的 base64 表示。实际上,通过 base64 对它们进行编码,您可以在 HTML 页面中显示它们时删除对路径的任何使用,例如:

<img alt="base64 image" src="data:image/png;base64,isdRw0KGgot5AAANdSsDIA..." />

src 属性包含一个标志,表明正在提供数据data: 文件mimetype image/png; 编码base64, 和编码图像数据isdRw0KGgot5AAANdSsDIA...

【讨论】:

  • 大卫,我想op想知道客户端是否可以解码base64以获得原始路径。 这是否意味着其他人可以解码 base64 字符串然后获取服务器路径
  • 完全正确。当您调用fs.readFile 时,您要求将路径位置的数据转换为base64 字符串,而不是路径本身:data.toString('base64')。如果您正在对路径进行编码,它将是destinationFilePath.toString('base64')。但只是为了再次让您知道 fs.readFile 返回的数据在 data 变量中不包含此信息。
  • @user1775888 太棒了。正如 NewToJS 在他的评论中所说,您始终可以使用base64decode.org 之类的工具检查您的 base64 中是否有任何文本内容编码
  • @DavidAnderton 非常感谢!!
  • 好的,不能隐藏ajax请求地址。尽管从您的服务器上加载图像的路径将被隐藏。我只是想确保它完全清楚:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-03
  • 1970-01-01
  • 2017-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多