供應鏈攻擊是 JavaScript 生態系統的大問題。在這篇短文中,我將概述一個簡單的安全措施,可以由所有 JavaScript 運行時(瀏覽器內和瀏覽器外)實現。這將防止當今困擾 JavaScript 生態系統的大多數供應鏈攻擊。
這是最近發生的網站被駭客攻擊的事件:
問題的核心是JavaScript 模組繼承了呼叫它們的應用程式或模組的權限。這對於瀏覽器內運行時和瀏覽器外運行時都是一個問題。
應用程式所依賴的模組版本可能會在應用程式作者不知情的情況下發生更改,這一事實使問題變得更加複雜。因此,即使所有依賴的程式碼都已經被徹底審查(這本身就是一個巨大的努力),如果依賴版本沒有被鎖定,這個努力就會被浪費。
為什麼不鎖定版本並使用基於 semver 的依賴項?嗯,這主要是因為如果模組發布者發布了錯誤修復,那麼最好使用修復的程式碼。這也是 esm.sh 等 JavaScript CDN 支援 semvers 的重要原因之一。
網頁瀏覽器是沙盒執行環境,因此網站匯入的第三方 JavaScript 模組 (3JM) 不會對最終使用者的裝置造成任何損害。
儘管如此,3JM 可以在未經網站同意的情況下使用設備的計算資源並發出網路請求進行比特幣挖礦等。
某些瀏覽器外執行時間(例如 Deno)確實實作了限制 JavaScript/TypeScript 應用程式權限的措施。但由於以下原因,這些措施還不夠:
目前,安全團隊已經建立了自動化流程,用於尋找在 NPM 等知名註冊表上發布的模組中的漏洞。這種安全措施有幾個缺點:
為了解決這些問題,我提出了一個新的每模組權限系統,該系統向後相容於 JS/TS 應用程式目前的工作方式。
這涉及一個新的可選權限配置,每個應用程式和模組都可以在其deno.json / deno.jsonc / package.json 文件中聲明。權限有 2 部分:
以下是 JS/TS 運作時如何使用權限:
這看起來非常簡單。 JS/TS 語言無需修改。如果沒有權限配置,那麼我們會回到目前的情況,即應用程式及其依賴關係圖都具有命令列參數提供的權限 ∎
以上是防止對 JavaScript 生態系統的供應鏈攻擊的詳細內容。更多資訊請關注PHP中文網其他相關文章!