【问题标题】:securing a Google Apps Script linked to an authorized trigger so others can edit保护链接到授权触发器的 Google Apps 脚本,以便其他人可以编辑
【发布时间】:2019-08-14 10:25:32
【问题描述】:

我很确定我的理解是正确的,但由于我找不到任何明确强调这一点的 Google 文档,所以我想在这里询问。

https://developers.google.com/apps-script/guides/triggers/installable:

可安装触发器始终在创建它们的人的帐户下运行。

而且我们知道,当您创建触发器时,它会要求对脚本使用的所有范围进行授权。

然后,这意味着对脚本具有编辑权限的任何人都可以利用用于创建触发器的用户的 Google 身份来访问触发器被授权的范围。

例如:

  • 用户 1 创建了一个使用 GmailApp 发送电子邮件的 Google Apps 脚本 (即GmailApp.sendEmail("one@example.com", "test subject", "email body");
  • 用户 1 创建一个触发器以每小时运行一次所述脚本,并使用适当的 GmailApp 范围对其进行授权
  • 用户 1 向用户 2 授予对所述脚本的编辑访问权限

现在,用户 2 可以进入所述脚本并更改代码并访问用户 1 的 Gmail 帐户。例如,用户 2 可以将代码更改为:

var emails = GmailApp.search("search string to find sensitive emails")
// use GmailApp.sendEmail to forward those details to someone else like User 2

他们所要做的就是修改代码并保存;他们不需要重新创建触发器,因为它已经存在。下次触发器运行时,它将运行更新/更新的代码。

我能够通过在我的一个帐户上创建一个测试脚本并授予另一个帐户编辑权限来确认此行为。

所以我的问题是,官方/推荐的减轻这种风险的方法是什么?显而易见的答案是不给其他任何人编辑权限,但如果这不是一个选项——如果出于支持目的需要多个人能够访问脚本,那该怎么办?

【问题讨论】:

    标签: security google-apps-script google-authentication privacy google-apps-script-editor


    【解决方案1】:

    正如你所说,唯一的官方/推荐方式是将编辑权限限制为受信任的人。

    在您的特定示例中,用户 1 可能选择了 MailApp 而不是 GmailApp。这两个看似多余的服务是分开提供的,因为与 GmailApp 相比,MailApp 暴露的权限非常有限。 (例如,用户 2 无法使用 MailApp 服务搜索受害者的 Gmail。)

    您可以进行协作,同时避免使用claspgit 直接访问您的脚本文件。只有你用clasp 推送到脚本。其他所有人都通过git 提交更改。您可以将系统设置为全自动(即git push 触发clasp push)或手动(即您首先查看所有更改),无论哪种方式,您都可以很好地记录谁做了什么,何时使用git

    【讨论】:

    • 谢谢。我会研究一下扣子。
    • 我有 clasp 在 Windows 10 上工作。我有 git。当其他人通过git 推送更改时,我将如何做到这一点,它会自动通过clasp 更新?我没有看到一些内置的方式,也不确定我是否遗漏了什么。
    • @IMTheNachoMan 研究“git hooks”——这是一个广泛的主题,远远超出了我在这些 cmets 中可以说的范围,但有据可查,而且 Stack Overflow 上肯定有很多例子。具体来说,如果您允许,您可能需要一个运行clasp push 的服务器端挂钩。设置起来并非易事。
    • 噢!脑袋放屁。我知道git hooks,但没有把这些点联系起来。我在想这是clasp方面的东西。知道了。谢谢!
    【解决方案2】:

    当您提供对脚本项目的编辑访问权限时,存在固有的信任。你要么信任这个人,要么不信任他们。中间没有。

    您仍然可以保护数据的一些“理论”方式:

    • 创建和使用不同的 Google 帐户。
    • 在特定部署处安装触发器/而不是在Head

      • 只有在手动完成时才有可能。以编程方式创建的可安装触发器只能用于Head
      • 部署 web-app/api 时,可以将其部署到特定版本。
      • 然后可以提供此部署版本,当您为项目here 创建新触发器时。
      • 不需要工作的 web-app/api。我们只是想获得一个部署 ID。
      • 这样,即使用户更改了脚本,您的触发器也只会在部署的旧版本上运行。
      • 可以在 Publish> Deploy from manifest 中查看已部署的版本。
    • 正如之前的答案所述,git 会是一个更好的电话。

    出于所有实际目的,您与恶意实体共享的任何数据都应被视为已泄露。

    【讨论】:

    • 仅仅因为您信任某人编辑代码并不意味着您信任他们可以访问您的 Google 资料,例如 Gmail 和云端硬盘。使用Head 将不起作用,因为目标是让第二个人能够在需要时进行更改。所以那个人需要能够做出改变并让它上线。 Git 有同样的问题,因为触发器所有者仍然需要推送更新的代码。这个想法是让第二个人能够在没有第二个人访问主要的 Google 身份的情况下,如果主要不可用,则能够编辑代码。
    • @IMT 仅仅因为您信任某人编辑代码并不意味着您信任他们可以访问您的 Google 资料,例如 Gmail 和 Drive 是的,确实如此。代码充当你并访问你的 gmail 并驱动做一些冒充你的事情。如果有人可以访问您的代码,则根据定义,他们可以访问代码可以访问的所有内容。这里的想法是不要使用 Head,以便在 user2 编辑代码后,您'仍然需要授权该新版本并手动接受它。 所以那个人..需要能够做出改变并让它上线。你希望它上线并避免曝光?!
    • 代码不像我。触发器就像我一样。仅仅因为我希望某人能够编辑代码并不意味着我希望他们能够通过触发器充当我的角色。 Google 的官方解决方案是使用不同的 Google 帐户。这是一个有意义的有效提议。我只需要说服我们的安全团队允许它。但这也是一个明显的风险。我想知道有多少组织正在使用 G-Suite,而员工却在不知不觉中授予了其他人访问其 Gmail 的权限,因为他们授予了对与经过身份验证的触发器相关联的代码的编辑权限。
    • 是的。我认为我所追求的不可行。使用第二个帐户和/或服务 ID 是最好的方法。但我确实认为,在授予其他人编辑您的代码的权限时,Google 可能会更害怕警告。如果您授予对绑定到触发器的代码的编辑访问权限,则可能会出现某种特殊警告。它隐含地暗示,但我认为考虑到用户群,它需要更加明确。
    • @IMT 我同意这个可怕的警告。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2017-09-26
    相关资源
    最近更新 更多