【问题标题】:HTTP URL Parameter Security for UrlFetchApp.fetch()UrlFetchApp.fetch() 的 HTTP URL 参数安全性
【发布时间】:2017-07-19 21:16:11
【问题描述】:

我有 (1) 一个带有绑定 Google Apps 脚本的 Google 表格电子表格,该脚本使用 UrlFetchApp.fetch() 向 (2) 我自己的 Google Apps 脚本网络应用程序(使用 doGet() 实现)发出请求。

当我发出请求时,我正在添加带有敏感信息的 HTTP 参数,例如:

https://script.google.com/macros/s/D83jfe2F543wj5s6U4Ws4I/exec?firstname=John&lastname=Smith&email=johnsmith@hotmail.com&SSN= 123456789

问:从安全角度来看,添加这样的敏感参数是否安全?它是 HTTPS,据我所知,URL 应该是端到端加密的。


注意:有人可能会争辩说,有人可能已经用病毒感染了用户的计算机以查看用户访问的 URL,但我只是运行了这个测试来找出 GAS 请求的来源,它们甚至不是来自用户的计算机,而不是来自山景城的谷歌服务器(所以似乎一切都以安全的方式“在幕后”发生?):

function findMyIP() {
  var url = "https://www.iplocation.net/find-ip-address"; // IP finder website
  var response = UrlFetchApp.fetch(url); // Execute a GET request from GAS to that website
  SpreadsheetApp.getUi().showModelessDialog(HtmlService.createHtmlOutput(response.getContentText()), 'Website Display');
}

编辑 - 供未来读者澄清的图片(感谢 Sandy Good 的回答):

【问题讨论】:

  • 感谢您的意见,亚历克斯。我试图了解请求发出后的工作方式。为澄清起见(正如您所提到的,这可能适合您发布的网页),您是否知道在 Google Apps 脚本之间发出的 HTTPS 请求是否始终保留在 Google 基础架构中?或者客户端可以访问正在进行的网络调用(例如在 Chrome 开发者工具下)?提前感谢您的任何建议。
  • 交互是“以安全的方式”完成的。 UrlFetchApp.fetch(url) 请求只能从 Google 服务器发出。无法从用户(客户端)的浏览器运行它。 Apps 脚本使用 HTTPS(末尾为“S”),但我不确定它是否使用了最新最好的加密方法。您可以改为发出 POST 请求,并使用 doPost(e) 接收它并将数据放入有效负载中。
  • @SandyGood 非常感谢您的意见!它解决了我的顾虑。如果您将其作为答案提交,我可以将其标记为正确!

标签: security web google-apps-script


【解决方案1】:

交互是“以安全的方式”完成的。 UrlFetchApp.fetch(url) 请求只能从 Google 服务器发出。无法从用户(客户端)的浏览器运行它。 Apps 脚本使用 HTTPS(末尾为“S”),但我不确定它是否使用了最新最好的加密方法。您可以改为发出 POST 请求,并使用 doPost(e) 接收它并将数据放入有效负载中。

【讨论】:

  • 桑迪,再次感谢您非常有用的建议!我正在编写安全规范。我有一个后续问题。当我使用 UrlFetchApp.fetch() 向我自己的 GAS Web 应用程序执行请求时,我注意到该请求不是来自已登录的 Google 帐户(或者可能没有适当的身份验证)。除非我将 Web 应用程序发布为允许“任何人甚至匿名”使用它,否则该请求将不起作用。你知道是否有办法解决这个问题,因为我只是从 GAS 到 GAS 通信?可能有一种方法可以发送经过身份验证的请求。
  • 有一种方法可以在 Web 应用程序之间使用 OAuth2 从一个 Web 应用程序到另一个 Web 应用程序进行身份验证。我没有如何做到这一点的细节。有几个库可用于将 OAuth2 与 Apps 脚本结合使用。 apps-script-oauth2 on Git Hubthe cGoa library
  • 您还可以向接收网络应用程序发送一个密码,允许“任何人甚至匿名”由于通信是加密的,应该没问题。因此,即使任何人都可以向 URL 发出请求,除非该密码匹配(并且您可以将其设置得很长),否则代码只是停止并且什么都不做。如果任何人都不知道接收 Web 应用的发布 URL,那么任何人都不太可能向该 URL 发出请求。
  • 非常感谢您分享您的经验!您的建议和链接非常有帮助!
猜你喜欢
  • 2015-03-14
  • 2015-09-22
  • 1970-01-01
  • 2011-11-25
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
  • 2014-06-26
  • 1970-01-01
相关资源
最近更新 更多