安全存储Google Apps脚本发布库中使用的API密钥 [英] Securely Storing API Secrets used in Google Apps Script - Published Library

查看:30
本文介绍了安全存储Google Apps脚本发布库中使用的API密钥的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在Google Sheets中,有一个脚本使用&UrlFetchApp";从外部API获取信息,而该外部API要求在每个调用中包含API密钥。

工作表有多个编辑器,但只有所有者才能看到API密钥,因此不能将密钥存储在脚本本身或使用PropertiesService

以下解决方案会阻止工作表编辑看到密钥吗?

  1. 新建独立Apps Script项目。

  2. 在独立脚本中,创建以下函数:

     function fetchData(idFromSheetScript) {
       var secret = '/abc123';
       var id = idFromSheetScript;
       var uri = 'https://.../'; 
       var url = uri+id+secret;
       var data = UrlFetchApp.fetch(url);
       return data;
     }
    
  3. 将独立脚本部署为库。不要与任何人共享该项目。

  4. 在Google Sheets绑定脚本中,导入库并使用库中的fetchData()函数。

     var response = fetchData('10');
    

导入库的工作表的编辑是能够查看或获取(通过记录或以其他方式)库中的";Secret";变量,还是只能查看函数的返回变量?

推荐答案

  • 您的方法有问题:

    • 库需要shared with atleast "view level" access to the end user,否则无法运行。因此,第3点是不可行的。

    • 标识符为MyLibrary的库的库源代码也可以用

      检索
      console.log(MyLibrary.fetchData.toString());
      //where fetchData is one of the function names in MyLibrary
      
  • 可安装编辑触发器:

    • 这些触发器run under the authority of the user who created the trigger。因此,库可以与一个用户/虚拟Google帐户共享,并让该用户安装触发器,同时限制其他所有编辑器对库源代码的访问。

    • 但是,如果有恶意的编辑器,他们只需将onEdit()函数编辑为:

      function onEditInstalled(){
        SpreadsheetApp.getActiveRange().setValue(MyLibrary.fetchData.toString())
      }
      

      并编辑一些内容以获得源代码+API密钥。但是,如果可安装触发器具有更多权限(如访问Gmail或驱动器),并且如果设置为始终在最新部署时运行,则他们可以对创建触发器的用户执行更多恶意操作。

    • 通过将触发器设置为Alwaysrun at a predetermined version和Not At Head/Latest Version,可以避免上述。在apps script dashboard user interface中设置触发器时可以更改此设置。要创建一个版本,您可以创建一个虚拟的库/Webapp部署或使用api。这可以保护代码不受任何修改,因为版本就像是当前代码的"快照"。一旦触发器被设置为在特定版本上执行,其他编辑者就不能更改它。目前,所有者或编辑也无法修改现有版本。Versions are immutable

  • script properties are not shared between the library and the including script开始,您可以使用它来隐藏API密钥。

  • 另一个选项是将独立脚本部署为具有访问权限的web app:任何人,包括匿名用户,但使用身份令牌(ScriptApp.getIdentityToken())使用您的身份验证机制。但您需要在Web应用端为ID令牌构建适当的验证机制。

    请注意,所有这些解决方法都不是针对安全性进行笔试的,而是作为基于经验的概念提供的。安全是相对的。欢迎批评。

这篇关于安全存储Google Apps脚本发布库中使用的API密钥的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆