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

Security practice for making an external API calls with Meteor

本文关键字:安全 调用 API Meteor 外部 使用      更新时间:2023-09-26

我在控制台测试,没有访问这些全局变量,但好奇这是否不能在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'
    });
  });

如果这不是最佳实践,请提供一个答案,它仍然允许我访问流星中的变量'T'。方法调用。谢谢!

if (Meteor.isServer) {...}

防止在客户端执行,但是,除非该文件位于/server目录中,否则它虽然没有执行,但仍然对客户端可用。这意味着任何浏览从服务器下载的javascript的人都可以观察到您的密钥 !!

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

首先,不建议您将密钥放入源代码中(因为很多原因太长,无法在这里列出),但是如果您这样做(作为一个快速的hack),请将包含密钥的文件放在/server目录中,这样它们就不会被外界观察到。

阅读Meteor.settings,了解如何避免在代码中使用密钥,并在与源代码分开的文件中进行外部管理。

流星。设置你的代码看起来像;

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
     });
   });