我想运行不受信任的 JavaScript 代码,因此我想使用函数作为沙箱,用户可以在其中运行简单的 JavaScript。
我实际上尚未列入白名单,无法使用 Google Cloud 功能,但我有一个问题:
HTTP 函数是否可以访问我的 Google Cloud 上下文?
如果我正确理解您的请求,您希望让 Cloud HTTP Functions 在服务器端评估用户提供的 Javascript 代码。
根据您的描述,该函数能够评估用户代码的唯一真正方法本质上是使用
eval
或 new Function()
。为了确认我提到的风险,我创建了一个云函数,只需将 POST 请求正文传递给eval
。如果没有任何依赖项,我可以代表云功能发出 HTTP 请求,这可能会很糟糕。
"@google-cloud"
作为依赖项,用户可以获得对该上下文的访问权限。我能够要求 @google-cloud
并获取该对象可访问的所有信息(应用程序凭据、应用程序信息等)。让恶意用户获得此类信息比第一次测试要糟糕得多。此外,Cloud Functions 默认情况下(大概是默认应用程序凭据)经过身份验证,从而获得 gcloud 客户端库的所有功能。
最终,在服务器上运行用户提供的代码的“最安全”方法将是在容器内。这本质上会将用户的代码锁定在 Linux 盒子中,其中的资源和网络功能可以完全由您控制。在 Google Cloud Platform 上,实现此目标的最佳方法可能是使用 App Engine 作为前端来处理用户请求,并使用 Compute Engine 虚拟机为用户代码创建和运行容器。它更复杂,但不会有破坏您的 Google Cloud Platform 项目的风险。