我很确定我的理解是正确的,但由于我找不到任何明确强调这一点的 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
他们所要做的就是更改代码并保存;他们不需要重新创建触发器,因为它已经存在。下次触发器运行时,它将运行更新/更新的代码。
我能够通过在我的一个帐户上创建测试脚本并授予另一个帐户编辑权限来确认此行为。
所以我的问题是,减轻这种风险的官方/推荐方法是什么?显而易见的答案是不给其他人编辑权限,但如果这不是一个选项怎么办——如果出于支持目的,多个人需要能够访问脚本怎么办,那怎么办?
正如您所说,唯一的官方/推荐方法是将编辑访问权限限制为受信任的人。
在您的特定示例中,用户 1 可能选择了 MailApp 而不是 GmailApp。 这两个看似多余的服务是分开提供的,因为与GmailApp相比,MailApp暴露的权限非常有限。 (例如,用户 2 无法使用 MailApp 服务搜索受害者 Gmail。
您可以进行协作,同时避免使用clasp
和git
直接访问您的脚本文件。 只有你用clasp
推动脚本。 其他人都通过git
提交更改。 您可以将系统设置为全自动(即git push
触发clasp push
(或手动(即您首先查看所有更改(,无论哪种方式,您都有关于谁做了什么,何时使用git
的良好记录。
提供对脚本项目的编辑访问权限时存在固有的信任。你要么信任这个人,要么不信任他们。没有中间。
一些"理论上"的方法,您仍然可以保护数据:
- 创建和使用不同的 Google 帐号。
-
在特定部署安装触发器/不在
Head
:- 只有手动完成才有可能。以编程方式创建的可安装触发器只能在
Head
- 部署 Web 应用/API 时,可以将其部署为特定版本。
- 然后,当您在此处为项目创建新触发器时,可以提供此部署版本。
- 不需要一个工作的Web应用程序/api。我们只希望获取部署 ID。
- 这样,即使用户更改脚本,触发器也只会在部署的旧版本上运行。
- 可以在发布>从清单部署中查看已部署的版本。
- 只有手动完成才有可能。以编程方式创建的可安装触发器只能在
-
正如前面的答案所述,
git
会是一个更好的选择。
出于所有实际目的,您与恶意实体共享的任何数据都应被视为已泄露。