【问题标题】:Properly enabling security for filepicker.io in Meteor在 Meteor 中正确启用 filepicker.io 的安全性
【发布时间】:2013-08-31 09:36:49
【问题描述】:

默认情况下,Filepicker 允许几乎每个人都可以将文件添加到您的 S3 存储桶中,这些人足够聪明,可以将您的 API 密钥从客户端代码中复制出来,幸运的是还提供了一个带有过期策略的安全选项。

但我不知道如何在 Meteor.js 中实现这一点。来回尝试,安装meteor-crypto-base 包,尝试在服务器上生成哈希,在https://github.com/RGBboy/urlsafe-base64 上尝试了RGBboy 的urlsafe-base64 算法。但我只是没有进一步。也许有人可以帮忙!提前谢谢你。

【问题讨论】:

    标签: node.js amazon-s3 meteor filepicker.io cryptojs


    【解决方案1】:

    这是一个基于文档here 的如何在流星中执行文件选择器签名 URL 的示例:

    var crypto = Npm.require('crypto');
    var FILEPICKER_KEY = 'Z3IYZSH2UJA7VN3QYFVSVCF7PI';
    var BASE_URL = 'https://www.filepicker.io/api/file';
    
    Meteor.methods({
      signedUrl: function(handle) {
        var expiry = Math.floor(new Date().getTime() / 1000 + 60 * 60);
    
        var policy = new Buffer(JSON.stringify({
          handle: handle,
          expiry: expiry
        })).toString('base64');
    
        var signature = crypto
          .createHmac('sha256', FILEPICKER_KEY)
          .update(policy)
          .digest('hex');
    
        return BASE_URL + "/" + handle +
          "?signature=" + signature + "&policy=" + policy;
      }
    });
    

    请注意,这需要存在于您的 server 目录中的某个位置,因此您不会将密钥发送给客户端。为了证明它有效,在客户端你可以这样调用它:

    Meteor.call('signedUrl', 'KW9EJhYtS6y48Whm2S6D', function(err, url){console.log(url)});
    

    如果一切正常,您应该在访问返回的 URL 时看到一张照片。

    【讨论】:

    • 非常感谢你拯救了我的一天!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    相关资源
    最近更新 更多