掃二維碼與項目經(jīng)理溝通
我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流
大家好,我是TianTian。

今天分享的內容是如何保護JavaScript的安全性。
今天,JavaScript的使用無處不在。它在你的瀏覽器和后端運行。
此外,JavaScript是一個高度依賴第三方庫的生態(tài)系統(tǒng)。因此,確保JavaScript的安全需要遵循最佳實踐來減少攻擊。但是,我們如何保持JavaScript應用程序的安全?讓我們來了解一下。
作為一個前端開發(fā)者,你可能已經(jīng)使用**< script >**標簽來導入第三方庫。你想過這樣做的安全風險嗎?如果第三方資源被篡改了怎么辦?是的,當你在你的網(wǎng)站上渲染外部資源時,這些事情都可能發(fā)生。因此,你的網(wǎng)站可能會面臨一個安全漏洞。作為對此的安全措施,你可以在你的腳本中添加一個完整性(也稱為子資源完整性--SRI)代碼,如下所示。
完整性屬性允許瀏覽器檢查獲取的腳本,以確保如果源頭被篡改,代碼永遠不會被加載。
我希望你們都知道,我們可以使用npm audit 命令來檢測所有安裝的依賴關系的漏洞。它提供漏洞報告,并為它們提供修復。
但你多長時間做一次呢?
除非我們把它自動化,否則這些漏洞會堆積起來,使之難以修復。記住,其中一些甚至可能是關鍵的,允許嚴重的漏洞。作為一個解決方案,你可以在你的CI中為每個拉動請求運行NPM來識別漏洞。因此,你可以防止任何漏洞不被注意到。
NPM audit security report example
然而,有一些漏洞需要開發(fā)人員的手動干預才能解決。
最近,GitHub推出了一個名為Dependabot的機器人,自動掃描NPM的依賴關系,并通過電子郵件通知你,說明風險。
One such email I have gotten for one of my projects
你有沒有見過任何NPM軟件包版本前面的^或~符號?
這些符號表示對次要版本和補丁版本(取決于符號)的自動版本提升。從技術上講,次要版本和補丁版本都是向后兼容的,減少了給應用程序引入錯誤的風險。
由于大多數(shù)第三方庫發(fā)布的熱修復漏洞都是補丁版本的顛簸,至少啟用自動補丁更新有助于降低安全風險。
作為一條經(jīng)驗法則,我們不應該只依賴客戶端驗證,因為攻擊者可以根據(jù)需要改變它們。然而,通過對每個輸入的驗證,可以省略一些JavaScript注入。
例如,如果你在評論區(qū)輸入帶有引號的東西< script > ,這些引號將被替換成雙引號 << scrip t>< /script>>。那么輸入的JavaScript代碼將不會被執(zhí)行。這被稱為跨網(wǎng)站腳本(XSS)。
同樣地,還有一些其他常見的方法來進行JavaScript注入:
防止JS注入對保持你的應用程序的安全是很重要的。
就像我之前提到的,有驗證的地方是防止它的一個方法。
例如,在保存任何輸入到數(shù)據(jù)庫之前,用 < ; 替換所有 < ,用 > ; 替換所有 >。
內容安全策略(CSP)是另一種避免惡意注入的方法。使用CSP是非常直接的,如下所示。
- Content-Security-Policy: trusted-types;
- Content-Security-Policy: trusted-types 'none';
- Content-Security-Policy: trusted-types
; - Content-Security-Policy: trusted-types
'allow-duplicates';
關于CSP的更多信息,請參考這些指南。
https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
開啟嚴格模式會限制你寫不安全的代碼。
此外,啟用這種模式是很簡單的。就像在你的JavaScript文件中加入下面這一行一樣簡單。
- use strict
當嚴格模式開啟時:
Linters對你的代碼庫進行靜態(tài)分析。它有助于建立質量和避免常見的陷阱。
由于質量與安全是相輔相成的,檢查有助于減少安全風險。
我們對JavaScript使用的幾個流行的工具如下:
此外,像SonarCloud這樣的工具也可以用來識別代碼氣味和已知的安全漏洞。一份Sonar報告將看起來像這樣。
注意:正如你在上圖中看到的,它有一個安全部分,顯示了漏洞、安全熱點。
攻擊者通常會試圖理解你的代碼,以入侵他們的方式。
因此,在生產(chǎn)構建中擁有一個可讀的源代碼會增加攻擊性。作為一種常見的做法,如果你對你的JavaScript代碼進行最小化和丑化,就很難利用你編寫的代碼中的漏洞。
然而,如果你想采取極端的措施來隱藏你的代碼,不被用戶/客戶發(fā)現(xiàn),那么它應該被保存在服務器端,根本不需要發(fā)送到瀏覽器上。
注重安全是非常重要的,特別是在JavaScript應用程序中,要使你的應用程序安全。
此外,如果你想尋求高級的解決方案。在這種情況下,有一些工具,如Snyk、WhiteSource,它們專門掃描你的代碼中的漏洞,并通過連續(xù)的集成將其自動化。

我們在微信上24小時期待你的聲音
解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流