2016-11-10 48 views
0

我沒有真正列入白名單尚未使用谷歌的雲功能,但我有這樣的疑問:運行不受信任的代碼功能

  • HTTP功能有我的谷歌雲計算背景下訪問?

我不想運行不受信任的javascript代碼,所以我想用一個函數作爲沙箱,用戶只需運行簡單的javascripts即可。

+0

在Cloud Functions中處理HTTP請求的所有Javascript代碼都在[導出的函數](https://cloud.google.com/functions/docs/writing/http)中運行。爲了在你的HTTP函數中運行用戶的JS代碼,你需要像request body那樣將代碼傳遞給服務器,並使用非常不安全的'eval'來解析HTTP函數。你能提供一個你想從你的HTTP函數運行的用戶JS代碼的例子嗎? Google雲環境的含義是什麼? – Nicholas

+0

將是一個像「codepen」或「jsfiddle」的應用程序。但在我的情況下,它評估服務器中的用戶代碼。如果它有惡意代碼,並且導出的功能沒有其他外部信息(被隔離),它將不會有問題,因爲它沒有任何信息可以竊取或崩潰。但是,如果我的谷歌雲證書,例如,暴露給這個導出的函數,這將是一個問題..在我的實際體系結構中,我使用[node vm](https://nodejs.org/api/vm.html)來處理它.. – felipepastorelima

+0

你需要什麼特定的serverside功能,客戶端JS執行不提供? – Nicholas

回答

2

如果我正確理解您的請求,您希望雲端HTTP功能在服務器端評估用戶提供的Javascript代碼。通過您的描述,函數能夠評估用戶代碼的唯一真正方法將基本上使用evalnew Function()。爲了確認我提到的風險,我創建了一個雲端函數,將POST請求主體傳遞給eval。如果沒有任何依賴關係,我可以代表雲計算功能發出HTTP請求,這可能非常糟糕。

鑑於最有用的雲功能將"@google-cloud"作爲依賴項,用戶可以訪問該上下文。我能夠要求@google-cloud並獲取該對象可訪問的所有信息(應用程序憑證,應用程序信息等)。將這些信息提供給惡意用戶比第一次測試要糟得多。此外,默認情況下,雲功能是通過默認應用程序憑證進行身份驗證的,從而獲得gcloud客戶端庫的所有功能。

最後,在服務器上運行用戶提供的代碼的方式將在容器內。這實際上將用戶的代碼鎖定到一個Linux資源中,資源和網絡功能可以完全由您來管理。在Google雲平臺上,完成此操作的最佳方式可能是使用App Engine作爲處理用戶請求的前端,並使用計算引擎VM爲用戶代碼創建和運行容器。它更復雜但不會破壞您的Google雲端平臺項目。

+0

只需注意:雲功能很快就會具有可配置的權限,但我同意他們不適合OP的用例。只有標註可能允許發送垃圾郵件或其他惡意活動。 –

相關問題