如果您在建置 Electron 應用程式時不夠謹慎,您可能會將應用程式的使用者置於實際的數位危險之中。像是 XSS(跨網站指令碼)和遠端程式碼執行等問題,實際上可能會使攻擊者深入存取您應用程式中的資料,甚至可能存取底層作業系統。
尤其是在「開放」環境中工作時,也就是作為一個開源專案,您肯定會想要考慮使用程式碼簽章和完整性檢查來強化您的應用程式。(請參閱「提示」章節)
警告
在任何情況下,您都不應載入和執行遠端程式碼。相反地,請僅使用本機檔案(與您的應用程式一起封裝)來執行主執行緒和/或預載腳本中的 Node.js 程式碼。
檢查清單:安全建議
Electron 團隊本身提出以下建議
- 請確保您將
webPreferences
>contextIsolation
設定為true
。使用預載腳本僅將必要的 API 注入到渲染執行緒。 - 如果您必須載入遠端內容且無法避免,那麼請僅載入安全內容
- 在所有載入遠端內容的會話中,使用
ses.setPermissionRequestHandler()
- 請勿停用
webSecurity
- 請勿將
allowRunningInsecureContent
設定為true
- 請勿啟用實驗性功能
- 請勿使用
enableBlinkFeatures
<webview>
:請勿使用allowpopups
<webview>
:驗證選項和參數- 停用或限制導航
- 停用或限制建立新視窗
除了上述第 3 項和第 4 項之外,如果偵測到其中一個問題,Electron 將會在開發人員主控台中發出警告。
Tips and Tricks
通訊協定
您現在應該已經知道,如果您沒有使用 **https** / **sftp** / **wss**,那麼應用程式與外界的通訊可能會非常容易被竄改。無論您正在建置什麼,請在所有地方都使用安全協定。
檔案系統存取
擁有檔案系統的讀寫權限是滲透測試人員的聖杯,如果您的應用程式啟用了這種互動類型,請考慮使用 IPC 和多個視窗(具有不同的權限),以最大程度地減少攻擊面。
加密
如果您的應用程式使用者有諸如錢包地址、個人資訊或其他類型的商業機密等機密,請在靜止時對該資訊進行加密,僅在需要時在記憶體中解密,並確保在使用完畢後覆寫/銷毀記憶體中的物件。但是無論您如何處理,請遵循以下四個規則
- 使用強加密(即抗碰撞且非 md5)
- 不要發明新型加密
- 明確遵循實作說明
- 考慮使用者體驗
在生產環境中停用開發人員工具
您可能不希望流氓穿帽 T 的惡棍在您的應用程式主控台中執行類似這樣的程式碼
window.location='https://evilsite.com/looks-just-like-your-app'
按鍵組合 CTRL+SHIFT+I (或 Mac 上的 ALT+CMD+I) 將會開啟開發人員工具並啟用應用程式的檢查。它甚至可以進行一定程度的修改。透過捕獲這些按鍵並 return false
來防止簡單的「惡毒女僕」攻擊。
發佈校驗和
當您建置完二進位 blob 並想要發佈它們時 (例如在 GitHub 上),請使用 shasum
並將這些結果張貼在顯眼的地方 (例如您專案的 GitHub 發佈頁面),並可能張貼在公共區塊鏈上,例如 Steem。
$ shasum -a 256 myApp-v1.0.0_darwin-x64.dmg
40ed03e0fb3c422e554c7e75d41ba71405a4a49d560b1bf92a00ea6f5cbd8daa myApp-v1.0.0_darwin-x64.dmg
簽署建置版本
雖然簽署程式碼並非分享應用程式的硬性要求,但這是最佳實務 — 而且 MacOS 和 Windows 商店都要求這樣做。請在此 Electron 官方教學 中閱讀更多相關資訊。
使用 SNYK
Snyk.io 是一項服務、CLI,甚至是 GitHub 整合機器人,它透過將您的 package.json 中的依賴項與其受損模組列表進行比較,來追蹤 node 模組中的漏洞。在許多情況下,他們的服務可以推薦最低更新版本,甚至提供他們自己已修補的模組。他們也進行研究和漏洞揭露。舉例來說,如果您正在處理任何壓縮檔案 (zip、tar 等),請查看他們的撰寫文章 和 受影響軟體列表,這應該會讓您嚇出一身冷汗。
對於真正偏執的人
針對每個平台目標使用專用的實體桌面機器。如果您必須讓此裝置保持連線,請確保作業系統始終保持更新,禁止來自網際網路/藍牙的任何輸入連線 (尤其是針對 shell/ssh),並執行持續的病毒和 rootkit 檢查。
僅允許合併 GPG 簽署的提交,並要求至少兩位團隊成員 (未建立 PR 的成員) 審查並批准提交。
重新考慮您的 node 套件管理系統
- 使用私有 npm 註冊表 (例如 JFrog)
- 將您的套件固定到已知可運作的特定版本
- 使用 pnpm
- 稽核每個模組及其依賴項
付費請人駭客入侵
聰明人可能已經駭入您的專案 (或底層程式庫)。如果您透過此應用程式賺錢,請考慮建立一個 Hacker One 帳戶並持續提供漏洞賞金。至少您可以說服駭客保持道德,而不是將漏洞賣給您的競爭對手。
尋求協助
您可能會感到不知所措,因為 Electron 的強大功能帶來了許多您從未想過要考慮的麻煩事。如果是這種情況,請考慮聯繫,並由 Quasar Framework 的資深開發團隊為您的應用程式提供審查、稽核和強化的專家支援。
本頁面的部分內容取自官方 Electron 安全指南。