Security 保护链接到授权触发器的Google Apps脚本,以便其他人可以编辑

Security 保护链接到授权触发器的Google Apps脚本,以便其他人可以编辑,security,google-apps-script,google-authentication,privacy,google-apps-script-editor,Security,Google Apps Script,Google Authentication,Privacy,Google Apps Script Editor,我很确定我的理解是正确的,但因为我找不到任何明确强调这一点的谷歌文档,所以我想在这里提问 Per: 可安装触发器总是在创建它们的人的帐户下运行 我们知道,当您创建触发器时,它将要求对脚本使用的所有作用域进行授权 然后,这意味着任何对脚本具有编辑访问权限的人都可以利用用于创建触发器的用户的Google标识来访问该触发器授权的作用域 例如: 用户1创建用于发送电子邮件的Google应用程序脚本 (即GmailApp.sendmail(“one@example.com“,”测试主题“,”电子邮件正文

我很确定我的理解是正确的,但因为我找不到任何明确强调这一点的谷歌文档,所以我想在这里提问

Per:

可安装触发器总是在创建它们的人的帐户下运行

我们知道,当您创建触发器时,它将要求对脚本使用的所有作用域进行授权

然后,这意味着任何对脚本具有编辑访问权限的人都可以利用用于创建触发器的用户的Google标识来访问该触发器授权的作用域

例如:

  • 用户1创建用于发送电子邮件的Google应用程序脚本 (即
    GmailApp.sendmail(“one@example.com“,”测试主题“,”电子邮件正文“;
  • 用户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
他们所要做的就是修改代码并保存;他们不需要重新创建触发器,因为它已经存在。下次触发器运行时,它将运行更新的代码

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


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

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

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


您可以使用
clasp
git
进行协作,同时避免直接访问脚本文件。只有您使用
clsp
按脚本。其他人都通过git
git
提交更改。您可以将系统设置为全自动(即
git-push
触发
clip-push
)或手动(即首先查看所有更改),但无论哪种方式,您都可以很好地记录使用
git
时谁做了什么,唯一的官方/推荐方式是将编辑权限限制为受信任的人

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

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

时谁做了什么,当您提供对脚本项目的编辑访问时,都有内在的信任。你要么信任这个人,要么不信任他们。没有中间人

您仍然可以使用一些“理论”方法来保护数据:

  • 创建和使用不同的谷歌账户
  • 在特定展开位置安装触发器/不在
    头部安装触发器

    • 仅当手动完成时才可能。以编程方式创建的可安装触发器只能用于
      Head
    • 部署web应用程序/api时,可以将其部署到特定版本
    • 然后,当您为项目创建新触发器时,可以提供此部署版本
    • 不需要工作的web应用程序/api。我们只想得到一个部署id
    • 这样,即使用户更改了脚本,触发器也只会在部署的旧版本上运行
    • 可以在发布>从清单部署中查看部署的版本
  • 正如前面的回答所述,
    git
    将是一个更好的选择

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

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

您仍然可以使用一些“理论”方法来保护数据:

  • 创建和使用不同的谷歌账户
  • 在特定展开位置安装触发器/不在
    头部安装触发器

    • 仅当手动完成时才可能。以编程方式创建的可安装触发器只能用于
      Head
    • 部署web应用程序/api时,可以将其部署到特定版本
    • 然后,当您为项目创建新触发器时,可以提供此部署版本
    • 不需要工作的web应用程序/api。我们只想得到一个部署id
    • 这样,即使用户更改了脚本,触发器也只会在部署的旧版本上运行
    • 可以在发布>从清单部署中查看部署的版本
  • 正如前面的回答所述,
    git
    将是一个更好的选择

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