在 Google 表格中,有一個腳本使用“UrlFetchApp”從需要在每次呼叫中包含 API 密鑰的外部 API 獲取資訊。
該作業表有許多編輯器,但只有所有者應該能夠看到 API 密鑰,因此將密鑰存盤在腳本本身中或使用PropertiesService不是一種選擇。
以下解決方案會阻止作業表編輯器看到密鑰嗎?
創建一個新的獨立Apps 腳本專案。
在獨立腳本中,創建以下函式:
function fetchData(idFromSheetScript) { var secret = '/abc123'; var id = idFromSheetScript; var uri = 'https://.../'; var url = uri id secret; var data = UrlFetchApp.fetch(url); return data; }將獨立腳本部署為庫。不要與任何人共享該專案。
在 Google 表格系結腳本中,匯入庫并使用庫中的 fetchData() 函式。
var response = fetchData('10');
匯入庫的作業表的編輯者是否能夠(通過日志記錄或其他方式)查看或獲取庫中的“秘密”變數,還是只能看到函式的回傳變數?
uj5u.com熱心網友回復:
你的方法有問題:
該庫需要與最終用戶至少具有“視圖級別”訪問權限,否則它將無法運行。所以,第3點是不可行的。
帶有識別符號的庫的庫源代碼
MyLibrary也可以通過console.log(MyLibrary.fetchData.toString()); //where fetchData is one of the function names in MyLibrary
可安裝的編輯觸發器:
這些觸發器在創建觸發器的用戶的權限下運行。因此,庫可以與一個用戶/虛擬 Google 帳戶共享,并讓該用戶安裝觸發器,同時限制對其他所有編輯器的庫源代碼訪問。
但是,如果我是一個懷有惡意的編輯器,我只需將 onEdit() 函式編輯為:
function onEditInstalled(){ SpreadsheetApp.getActiveRange().setValue(MyLibrary.fetchData.toString()) }并編輯一些東西以獲取源 api 密鑰。但是,如果可安裝的觸發器具有更多權限(例如訪問 Gmail 或 Drive)并且設定為始終在最新部署中運行,我可以對創建觸發器的用戶做更多邪惡的事情。
可以通過將腳本設定為始終在預定版本而不是 HEAD/最新版本上運行來避免上述情況。這可以在應用程式腳本儀表板用戶界面中設定觸發器時更改。
由于庫和包含腳本之間不共享腳本屬性,因此您可以使用它來隱藏 api 密鑰。
另一種選擇是將獨立腳本部署為具有訪問權限的Web 應用程式:包括匿名在內的任何人,但使用身份令牌 (
ScriptApp.getIdentityToken())使用您的身份驗證機制。但是您需要在 Web 應用程式端為 id 令牌構建適當的驗證機制。請注意,所有這些解決方法都沒有針對安全性進行滲透測驗,而是作為概念提供的。歡迎批評。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/395420.html
