內容安全策略 (CSP) 解釋

已發表: 2023-04-18

隨著網絡安全威脅的快速發展,依靠單層防禦已不足以保護您的在線狀態。 這使得網站所有者必須採用多層安全方法,縱深防禦的概念最能體現這種方法。

在網站和 Web 應用程序中,深度防禦可以通過使用 HTTP 安全響應標頭實施,專門設計用於在客戶端實施額外的安全控制。 HTTP 響應標頭是抵禦針對 Web 應用程序的網絡攻擊的重要第二道防線。

作為關鍵的 HTTP 安全響應標頭之一,內容安全策略 (CSP) 可以有效保護您的網站及其訪問者免受跨站點腳本 (XSS) 和數據注入攻擊的破壞性後果。

在本指南中,您將了解為什麼內容安全策略是一個關鍵的 HTTP 安全標頭,以及如何在您的網站上實施深度防禦以成功緩解針對 WordPress 的各種複雜網絡攻擊。

內容安全政策

什麼是 HTTP 響應標頭?

HTTP 響應標頭是在網站和 Web 應用程序中實現的一組控件,用於定義瀏覽器如何與請求的內容交互。 實施 HTTP 響應標頭可以幫助網站所有者顯著改善用戶體驗,並改善其網站的功能、性能和安全性。

由於少量信息與網站訪問者請求的內容一起發送,因此 HTTP 響應標頭會修改瀏覽器解釋和處理從 Web 服務器收到的響應的方式。 雖然網站的內容和功能保持不變,但實施 HTTP 響應標頭可以改變用戶對它的看法。

HTTP 安全響應標頭作為安全威脅的第二層防禦

HTTP 響應標頭的關鍵領域之一,例如內容安全策略,用於網站安全。 HTTP 響應標頭提供的強大功能使其成為重要的第二道防線,可抵禦許多針對 WordPress 等動態 Web 應用程序的網絡攻擊。

抵禦網絡攻擊的第一道防線包括許多基於代碼和服務器端的安全措施,這些措施可減少攻擊面並消除應用程序級漏洞。 這包括使用安全編碼實踐、建立強大的訪問控制策略以及實施 Web 應用程序防火牆來檢查傳入請求並過濾掉惡意流量。

雖然擁有強大的第一道防線是絕對必要的,但依賴單一的安全層仍然會使您的網站容易受到日益複雜的攻擊。 可以輕鬆規避單個安全控制,特別是如果攻擊者能夠識別和利用未修補的漏洞。

內容安全策略和其他安全響應標頭通過減少惡意攻擊造成的危害來提供額外的保護層。 如果惡意黑客能夠成功識別您網站上的漏洞,強大的第二道防線將使攻擊者更難利用它。

什麼是內容安全政策?

內容安全策略 (CSP) 是一種安全機制,用於定義允許網站或特定網頁加載的內容的可信來源列表,以及為此使用的協議。 這可以包括腳本、樣式表、圖像和可以嵌入到網頁中的其他類型的內容。

內容安全策略是一種強大的縱深防禦安全控制,有助於阻止對當前網站之外的內容的未經授權的請求。 除此之外,CSP 還成功地阻止了內聯腳本的執行並限制了不安全的動態代碼的執行。

CSP作為HTTP安全響應頭,將網站所有者配置的指令傳遞給訪問者的瀏覽器。 然後,瀏覽器必須按照說明阻止未經內容安全策略規則授權的內容的傳遞。 這樣,瀏覽器將看到某個網頁引用了某些內容,但會拒絕加載它。

為什麼內容安全策略如此重要?

作為第二道防線,內容安全策略在大多數情況下不會阻止攻擊者破壞網站。 儘管如此,它仍將有助於減輕惡意軟件感染的破壞性後果,阻止黑客利用它的企圖。

即使出於竊取敏感信息或執行其他惡意活動的目的將惡意軟件注入您的網站,強大的 CSP 策略也會確保您和您的客戶的安全。 惡意行為者根本無法利用客戶對您網站的信任,因為瀏覽器會首先阻止任何惡意代碼的執行。

在您重新獲得對網站的完全控制權並在網站遭到破壞後執行惡意軟件清理的同時,能夠阻止黑客利用您的網站的努力,這使得實施內容安全策略成為保護現代網站和 Web 應用程序的強大工具。

CSP 保護什麼?

內容安全策略保護網站及其訪問者免受惡意軟件感染引發的一系列網絡攻擊,以及依賴託管在攻擊者控制的資源上的惡意腳本的入侵企圖。 這包括跨站點腳本 (XSS)、文件包含攻擊和點擊劫持,它們是內容安全策略緩解的三大攻擊媒介。

跨站點腳本 (XSS)

跨站點腳本 (XSS) 是一種注入攻擊,涉及將惡意代碼插入網頁。 代碼將在網頁加載時由瀏覽器執行,從而允許攻擊者竊取敏感信息、劫持用戶會話或分發惡意軟件。

為了執行跨站點腳本攻擊,黑客可以將惡意軟件作為嵌入到 HTML 中的內聯腳本注入,或者通過引用通常託管在攻擊者控制的網站上的外部腳本來注入。 在內容渲染過程中,惡意代碼會在用戶不知情或未同意的情況下加載到用戶的瀏覽器中並執行。

影響 WordPress 網站所有者的跨站點腳本攻擊的一個很好的例子是將卡片竊取惡意軟件注入 WooCommerce 結賬,這將竊取購買者的付款信息。 用於執行跨站點腳本攻擊的卡片分離器和其他類型的 JavaScript 嗅探器在網頁的源代碼中通常如下所示:

 <script type="text/javascript" src="https://hackerswebsite/evil.js"></script>

對於內聯腳本,您會看到惡意代碼嵌入到腳本標籤中,甚至通過使用樣式標籤偽裝成樣式表。

緩解跨站點腳本是實施內容安全策略的主要目標。 通過阻止執行內聯腳本、使用 eval 函數注入的不安全 Javascript 以及阻止從不受信任的源加載的腳本,內容安全策略 (CSP) 有效地降低了在網站上執行任意代碼的風險。

文件包含攻擊

文件包含攻擊是內容安全策略可以緩解的另一種注入攻擊。 作為一種入侵技術,遠程文件包含攻擊允許黑客利用不同網站區域的輸入驗證不佳來執行託管在外部資源上的惡意代碼。

遠程文件包含攻擊通常利用 WordPress 插件和主題中未修補的漏洞,目的是通過安裝 web shell 後門侵入網站。 與跨站點腳本緩解類似,內容安全策略將有效阻止所有可疑的外部腳本被注入網站,從而使攻擊者幾乎不可能利用遠程文件包含 (RFI) 漏洞。

點擊劫持

除了允許網站所有者定義受信任資源的列表以從中加載內容外,內容安全策略還可以幫助限制授權將網站內容嵌入框架內的網站列表。 這有助於減輕用戶界面 (UI) 補救攻擊,例如點擊劫持,您的客戶可能會通過打開在魚叉式網絡釣魚攻擊中發送給他們的可疑鏈接而成為受害者。

Content Security Policy frame-ancestors指令已成功替換X-Frame-Options標頭,該標頭現在已被大多數現代瀏覽器棄用。 這個和其他 CSP 指令對於 WordPress 安全性來說是絕對必要的。

內容安全策略指令

內容安全策略可幫助您指定一組規則(稱為指令)來控制您的網站可以加載的內容來源。 內容安全策略指令是包含在所請求網頁的 HTTP 標頭中的指令列表,用於定義允許瀏覽器在該頁面上加載的內容類型,以及可從中加載內容的可信源列表。

在可用的各種內容安全策略指令中,以下規則最常用於保護網站免受跨站點腳本 (XSS)、點擊劫持和數據注入攻擊。 以下所有 CSP 指令,除了frame-ancestorsform-actionupgrade-insecure-requests之外,都是獲取指令,用於指定要從中加載內容的資源列表。 Frame-ancestorsform-action是導航指令,用於定義其他資源如何使用為其配置內容安全策略的網站內容。

  • default-src定義加載所有類型資源的策略,如果沒有為特定類型的內容指定額外規則,瀏覽器將默認加載。
  • script-src指定可以從網站加載的 JavaScript 文件的可信來源。
  • style-src定義樣式表 (CSS) 的有效來源列表。
  • img-src將可以從中加載圖像的資源列入白名單。
  • media-src指定嵌入在 HTML <audio><video>元素中的音頻和視頻文件的可信來源
  • connect-src提供對XMLHttpRequestEventSourceWebSocket連接的控制。
  • child-src定義了可以通過框架包含在網頁中的內容源。
  • frame-ancestors是一個導航指令,通過指定允許在框架中嵌入網站內容的資源列表來幫助減輕點擊劫持攻擊。
  • form-action限制 Web 表單可以提交信息的資源,防止數據洩露到攻擊者控制的外部資源。
  • upgrade-insecure-requests指示瀏覽器將所有不安全的請求升級到HTTPS ,確保安全連接。

根據網站的類型及其提供的特定功能,網站所有者可能需要配置多個指令來控制從外部獲取的所有內容源。

使用內容安全策略作為第二道防線確保充分保護免受跨腳本和注入攻擊的行業標準是通過default-src指令將外部內容的有效來源限制為僅當前網站。 然後可以使用更有針對性的指令將特定類型內容的資源列入白名單,但拒絕所有其他資源是推薦的方法。

配置內容安全策略指令

每個內容安全策略指令都接受由統一資源定位器 (URL) 表示的值列表,其中應包括有效的 Web 地址,前面是協議、域名、通配符或特定值,例如'self''none'由 HTTP 響應標頭提供。

以下是可以分配給內容安全策略指令的一些值實例:

指令值例子定義
* media-src* 通配符,用於允許從所有資源加載所有內容。
'self' default-src 'self'
frame-ancestors 'self';
將當前網站列入白名單,作為特定內容的唯一有效來源。 定義了嚴格的同源安全策略,推薦默認的Content Security Policy。

與 frame-ancestors 指令一起使用,禁止在網站本身以外的資源上構建內容框架。
'none' media-src 'none' 不允許從任何來源加載資源,包括同一網站。
domain.com
*.domain.com
img-sr c *.domain.com 允許從 domain.com 下的任何子域加載內容。
https://domain.com default-src 'https://domain.com' 允許僅通過 HTTPS 從指定域名獲取內容。

默認情況下,無論指定的規則如何,內容安全策略都會阻止內聯腳本的執行,並阻止網頁執行文本到 JavaScript 的函數,例如惡意黑客常用的 eval。 在script-src內容安全策略指令中添加'unsafe-inline''unsafe-eval'值可以幫助網站所有者繞過限制,但這會使網站面臨重大安全風險並破壞其他指令施加的保護.

以下 Content Security Policy 標頭配置有效防止網站從外部資源加載內容,並禁止執行內聯腳本和不安全的 JavaScript:

Content-Security-Policy "default-src 'self' https://mywebsite.com; frame-ancestors 'self'"

給定'self'值,frame-ancestors 指令通過阻止內容框架來減輕點擊劫持攻擊。

內容安全策略和內容交付網絡 (CDN)

由於大多數內容分發網絡(例如 Cloudflare)完全兼容內容安全策略,並且不會修改源服務器的 CPS 標頭。 您不需要在您配置的安全規則中將任何其他資源列入白名單。

為 WordPress 實施內容安全策略

WordPress 提供了各種用於添加 HTTP 響應標頭的插件,這對於非技術用戶來說是一個不錯的選擇。 雖然這是一個方便的選項,但為您的 WordPress 網站設置內容安全策略等安全響應標頭是一個簡單的過程,不需要安裝任何第三方軟件。

mod_headers Apache 模塊和ngx_http_headers_module Nginx 模塊允許您為您的網站配置 HTTP 響應標頭。 如果您使用的是 Nginx,則可以在網站的服務器 {} 塊中包含add_header指令以配置 HTTP 響應標頭。

同樣,如果您使用 Apache 作為 Web 服務器,則可以使用“Header set”和“Header append”語句在文檔根目錄中找到的網站本地.htaccess文件中配置安全策略。 這樣,您網站根目錄中的 .htaccess 文件中指定的配置將應用於網站上的所有網頁。

請務必注意,通過使用 Apache,您可以在本地(在.htaccess文件中)和服務器上所有網站的全局配置 HTTP 響應標頭。 您的託管服務提供商可能會在全球範圍內配置某些響應標頭,尤其是當您使用共享託管計劃時。 使用“Header set”方法配置 Content Security Policy 將完全覆蓋現有的全局規則,而使用“Header append”會將您的新策略合併到現有的響應頭中,而不是替換整個配置。

您可以添加下面的內容安全策略配置,以在您的 WordPress 網站上實施嚴格的安全控制

對於阿帕奇:

 Header set Content-Security-Policy "default-src 'self' https://mywebsite.com; frame-ancestors 'self';"

對於 Nginx:

 add_header Content-Security-Policy "default-src 'self' https://mywebsite.com; frame-ancestors 'self';"

制定滿足您網站安全需求的內容安全策略配置可能需要進行一些測試,以及對網站功能的透徹了解。 此外,在您的 WordPress 站點上實施新的安全協議可能會導致功能丟失,因此仔細考慮任何更改的影響非常重要。 您可以聯繫您的託管服務提供商或聯繫您的開發人員,以確保安全標頭配置正確並且不會造成任何負面後果。

使用 iThemes Security Pro 實施深度防禦

在當今的威脅形勢下,採用縱深防禦策略至關重要。 對於像 WordPress 這樣的現代動態 Web 應用程序,內容安全策略標頭是縱深防禦的核心,提供了一個關鍵的保護層來防止跨站點腳本 (XSS)、文件包含攻擊、點擊劫持和其他基於 Web 的攻擊。

實施全面的縱深防禦解決方案一直具有挑戰性。 但是使用 iThemes Security Pro,一個強大而可靠的安全插件,您可以保護您的 WordPress 網站。 借助文件完整性監控、漏洞掃描、自動軟件更新和無密碼身份驗證等功能,您可以放心,WordPress 網站的所有關鍵部分都受到保護,免受不斷演變的安全威脅。