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