【问题标题】:Run untrusted code at Google Cloud Functions在 Google Cloud Functions 上运行不受信任的代码
【发布时间】:2017-03-24 11:57:27
【问题描述】:

我实际上还没有被列入使用谷歌云功能的白名单,但我有一个问题:

  • http 函数可以访问我的谷歌云上下文吗?

我不想运行不受信任的 javascript 代码,所以我想使用一个函数作为沙箱,用户可以在其中运行简单的 javascript。

【问题讨论】:

  • 所有用于在 Cloud Functions 中处理 HTTP 请求的 Javascript 代码都在 exported function 内运行。要在 HTTP 函数中运行用户的 JS 代码,您需要像通过请求正文一样将代码传递给服务器,并像使用 eval 那样解析 HTTP 函数,这是非常不安全的。您能否提供一个您希望从 HTTP 函数运行的用户 JS 代码示例? Google Cloud 上下文是什么意思?
  • 将是“codepen”或“jsfiddle”之类的应用程序。但在我的情况下,它会评估服务器中的用户代码。如果它有恶意代码并且导出的函数没有其他外部信息(被隔离),那是没有问题的,因为它没有信息被窃取或崩溃。但是,例如,如果我的谷歌云凭证暴露给这个导出的函数,那将是一个问题。在我的实际架构中,我使用node vm 来处理它。
  • 您需要哪些特定的服务器端功能而客户端 JS 执行不提供?
  • 没有人.. 但是出于隐私原因,用户 A 生成的代码不能暴露给正在使用该代码的用户 B..

标签: google-cloud-platform google-cloud-functions


【解决方案1】:

如果我正确理解您的请求,您希望 Cloud HTTP Functions 在服务器端评估用户提供的 Javascript 代码。

根据您的描述,该函数能够评估用户代码的唯一真正方法基本上是使用evalnew Function()。为了确认我提到的风险,我创建了一个云函数,它只是将 POST 请求正文传递给eval。如果没有任何依赖,我可以代表云功能发出 HTTP 请求,这可能很糟糕。

鉴于大多数有用的云函数都将 "@google-cloud" 作为依赖项,因此用户可以访问该上下文。我能够要求@google-cloud 并获取该对象可访问的所有信息(应用程序凭据、应用程序信息等)。向恶意用户提供此类信息比第一次测试要糟糕得多。此外,Cloud Functions 默认经过身份验证,大概是默认应用程序凭据,因此获得了 gcloud 客户端库的所有功能。

最后,在服务器上运行用户提供的代码的最安全方式将是在容器内。这实际上会将用户的代码锁定在一个 Linux 盒子中,其中的资源和网络功能可以完全由您管理。在 Google Cloud Platform 上,实现此目的的最佳方法可能是使用 App Engine 作为前端来处理用户请求,并使用 Compute Engine VM 来为用户代码创建和运行容器。它更复杂,但不会有破坏您的 Google Cloud Platform 项目的风险。

【讨论】:

  • 请注意:云功能将很快具有可配置的权限,但我同意它们不适合 OP 的用例。仅标注就可能导致垃圾邮件或其他恶意活动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-05
  • 2019-05-18
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
相关资源
最近更新 更多