使用 Meteor 进行外部 API 调用的安全实践

Security practice for making an external API calls with Meteor

我在控制台中进行了测试,但无法访问这些全局变量,但很好奇这在 Meteor 中是否可行:

if (Meteor.isServer) {
  Meteor.startup(function () {
    Twit = Meteor.npmRequire('twit')
    T = new Twit({
        consumer_key:         'cYiYGQ0BsN4DCM2'
      , consumer_secret:      'uU6g0RqcDkkHwasaibQ5zi6Zpgtb'
      , access_token:         '324050hbjhVvdgi0xEUHKreca9u7dTo'
      , access_token_secret:  'gCNBxu3NAQ9dNbhbvU6KwX'
    });
  });

如果这不是最佳做法,请提供一个仍然允许我在 Meteor.methods 调用中访问变量 'T' 的答案。谢谢!

if (Meteor.isServer) {...}

防止在客户端执行,但是除非文件驻留在 /server 目录中,否则它仍然可供客户端使用,尽管未执行。这意味着任何正在浏览从您的服务器 下载的 javascript 的人都可以观察到您的密钥 !!!

我相信你会同意那是不好的。

首先,不建议您将密钥放入源代码中(由于很多原因太长无法在此处列出),但如果您这样做(作为快速破解),请将带有密钥的文件放在 /server 目录,这样他们就不会被世界观察到。

阅读有关 Meteor.settings 的内容,了解如何避免将您的密钥放在代码中并在与源文件分开的文件中进行外部管理。

使用 Meteor.setting 你的代码看起来像;

file: $(projecthome)/server/twitter.js:

   Meteor.startup(function () {
     Twit = Meteor.npmRequire('twit')
     T = new Twit({
         consumer_key:         Meteor.settings.TWIT.key
       , consumer_secret:      Meteor.settings.TWIT.secret
       , access_token:         Meteor.settings.TWIT.token
       , access_token_secret:  Meteor.settings.TWIT.token_secret
     });
   });