如何檢查您的 WordPress 系統是否受到 XSS 攻擊的保護
已發表: 2016-07-09在全球範圍內,近 48% 的網站易受跨站腳本 (XSS) 攻擊。 在全球範圍內,幾乎正好有 25% 的網站使用 WordPress 平台。
由此可見,在易受 XSS 攻擊的網站和運行 WordPress 平台的網站的維恩圖中,重疊一定是相當大的。
這不是對平臺本身的敲門聲。 WordPress 團隊已將安全性作為其使命宣言的一個組成部分,並在漏洞被發現時積極修補漏洞。但這並不能阻止人們編寫不安全的主題或安裝不安全的插件。 這些問題是 WordPress 網站 XSS 攻擊的兩個主要入口,本文將討論如何阻止它們。
跨站腳本簡介
首先,讓我們討論一下 XSS 攻擊是如何進行的。 有不止一種類型的 XSS 攻擊,所以我將從一個簡化的定義開始。 通常,XSS 攻擊始於未經處理的輸入——評論表單、評論框、搜索欄等。這些攻擊的複雜程度差異很大。實際上,WordPress 用戶每天都會看到最簡單的 XSS 攻擊形式:垃圾評論。 你知道我在說什麼:“感謝這篇出色的文章。 順便說一句,這是我在家工作每週賺 5,000 美元的網站:www.only-an-idiot-would-click-this-link.co.uk。 ”
在某種程度上,垃圾評論是 XSS 攻擊的完美例子。 惡意實體會破壞您網站的基礎架構(評論框),將其內容(惡意鏈接)放到您的網站上。 雖然這是一個很好的說明性示例,但更真實的 XSS 攻擊會更加微妙。 垃圾評論需要大約五秒鐘的時間來創建。 XSS 攻擊是一個適當的黑客會花費更多時間的事情。
真正的黑帽會嘗試利用您網站的所有方面,將數據提交到服務器,本質上將它們用作微型文本編輯器。 如果您的輸入沒有受到保護,這意味著他們可以從字面上獲取他們的代碼並強制您的應用程序運行它並在用戶的瀏覽器中呈現(並且可以包括您的瀏覽器)。 與垃圾評論不同,只有對您網站的修改代碼進行詳細檢查或通過網站交互進行梳理才能發現違規行為。 正如人們可能想像的那樣,這種違規行為可能導致的令人不快的事情數不勝數。
簡單的破壞行為是 XSS 攻擊的一個相對常見的結果,導致您的用戶在您的內容的位置顯示出怪誕的圖像或政治宣傳。 很少有長期計劃或道德問題的營銷人員會使用它們違背他們的意願向人們做廣告。更細微和微妙的攻擊可能會竊取您用戶的登錄憑據。 如果其中一個擁有管理員權限,那麼您存儲在您網站上的任何個人信息都可能會被搶購一空。 或者,他們可能會使用最初的 XSS 攻擊作為撬開您的網站並安裝更高級惡意軟件的槓桿。
停止攻擊
如果您是一個相當精通代碼的人,並且您是一個相對較小的 WordPress 站點的唯一所有者,那麼安全編碼實踐可能是鎖定您的站點免受跨站點腳本攻擊的最佳方法。 我包含此警告是因為如果您是運行更複雜應用程序的大型組織的一部分,那麼您可能無法找到惡意攻擊者可能注入代碼的每個區域。 現代網站的規模可能很大,您可能應該聘請經驗豐富的專業人士並將時間花在其他追求上,以使您的網站更好地為您的讀者服務。
另一個警告是,如果您不是特別精通代碼並且讓其他人為您構建您的網站,那麼不要假設他們使用了安全編碼實踐。 眾所周知,即使是最有經驗的開發人員也會將安全性擱置一旁,或者在沒有其他人檢查他們的工作的情況下犯一些小錯誤。其他開發人員可能根本不知道他們在安全方面做了什麼,而其他開發人員仍然會掩蓋安全性以節省自己的時間(儘管在這方面缺乏專業精神)。 總之,請確保您聘請一位在開發和保護您的網站時不會偷工減料的知名專業人士。
表達了這種擔憂,為了防止跨站點腳本,您可以做的第一件也是最簡單的事情之一就是驗證用戶數據。
假設您的網站上有一個註冊表單,該表單要求用戶輸入他們的姓名。 惡意用戶可能會鍵入以下內容:
[xhtml]
<script>CoughUpYourPreciousData();</script>
[/xhtml]
例如,這可能會導致下一個訪問該頁面的人將其 cookie 的副本發送給攻擊者。
你可以看到在這個例子中,上面的代碼字符串看起來不像某人的名字。 您的服務器不知道這一點,但是通過使用一些設置參數,您可以教它。 例如,您可以告訴該字段拒絕特殊字符,例如 <>、() 和 ; (評論部分並不特別需要它們)。 您可以告訴該字段一個人的姓名中可能沒有數字。 如果您願意有點嚴厲,您可以告訴該字段拒絕長度超過 15 個字符的輸入(或者您可以根據需要更改值)。 採取這些步驟將大大限制攻擊者對特定領域的破壞程度。

即使使用數據驗證,您也可能無法實際限制正在使用的字符類型的表單或字段,例如在聯繫表單或評論字段中。 您可以做的是清理數據。 此過程使 HTML 無法在給定字段中執行,將所有可識別為可執行代碼的內容轉換為非編碼字符。 例如,超鏈接不會出現在原本可能有的地方。
最後,在某些情況下,您的網站最終可能會顯示對用戶不安全的數據。 假設有人在您的某個頁面上寫了一條惡意評論,該評論隨後被您網站的搜索功能編入索引。 每當您的用戶執行搜索時,該惡意代碼就會在其瀏覽器加載搜索結果時執行。 這可以通過轉義數據來防止,這可以確保當您的站點向用戶提供數據時,唯一運行的代碼就是您要運行的代碼。
有關數據驗證、清理數據和轉義數據的更多信息,WordPress Codex 有一個很好的資源。 它將詳細解釋上述概念,並提供更多可以普遍應用的示例。
其他方法
大公司有更大的網站; 這是事實。 也許每天有成千上萬的人使用您的網站。 也許除了標準的表單和字段之外,還有動畫、各種門戶、用 Java 編寫的部件等等。 即使您跟踪所有這些,也許您的一個應用程序中有一個零日,您無法為自己辯護。
在這種情況下,如果您有足夠的影響力和預算來這樣做,我建議您投資購買 Web 應用程序防火牆 (WAF)。 一個好的 WAF 將具有自動識別和阻止最常與代碼注入攻擊相關聯的 HTML 字符串的關聯規則。 他們還可以在應用程序開始洩露數據時通知您,而這些數據不應該或以不尋常的數量進行,從而有助於防禦零日攻擊和其他高級威脅。 WAF 不是靈丹妙藥,但對於希望保護複雜應用程序的安全專業人員和網站所有者來說,它是一種寶貴的工具。
還有一些插件聲稱可以防禦 XSS 攻擊。 我其實不推薦這些。 許多這些插件並沒有降低風險,而是代表了黑客可以利用的另一個攻擊面。 即使是最知名和最廣泛使用的安全插件之一,Akismet,去年也被發現容易受到 XSS 攻擊。 在轉移 XSS 攻擊時,不要半信半疑。 培養必要的技能並使用適當的工具集來確保您的網站安全。
其他實際應用
對於外行來說,這些信息可能有點複雜,但我不希望人們因這些信息的潛在復雜性而氣餒。 如果發生 XSS 攻擊,您可以肯定,清理此類事件的後果將遠比在您的網站上進行更改複雜得多。 清理您網站的聲譽成本(普通讀者很容易逃離您的網站)將是您不想擔心的另一個問題。
即使您要讓其他人為您處理您的網站開發和安全問題,也要盡您所能至少能夠應對緊急情況並知道您的弱點在哪裡。 從長遠來看,知道如何檢查您的系統將是一項至關重要的技能,並成為其他安全主題和網站開發項目的基礎。 一切都是在線互聯的,雖然 XSS 攻擊可能是過去幾年的事情(儘管這不太可能),但了解您網站的來龍去脈永遠不會過時。
最後的想法
互聯網安全格局不斷變化。 您永遠無法完全確定 XSS 攻擊可能如何出現或如何被用來對付您,但您應該為自己和您的讀者確保您正在盡一切力量阻止它們。 不斷了解這種威脅,並定期(我建議至少每月一次)檢查網絡安全領域的任何相關發展。
這也不意味著您可以忽略其他威脅。 公共網絡訪問仍然需要使用 VPN 才能安全。 您不能忽視用於訪問您網站的任何計算機的安全性。 登錄信息仍然需要經常更改,並避免暴力攻擊。 XSS 攻擊是殘酷的,但它們並不是唯一需要注意的威脅。
您還可能應該與您的同行和感興趣的各方分享這些信息(甚至這篇文章),以傳播對這些類型攻擊的抵抗力。 雖然您自己可能無法做太多事情,但如果有足夠多的人正確保護自己,我們可能會看到這些類型的攻擊普遍減少,因為黑客試圖找出另一種從可憐的互聯網用戶中獲利的方式。
您自己對如何檢查 XSS 攻擊以及將來如何防禦它們有任何想法嗎? 您自己是否有任何其他檢測和刪除策略來對抗這種威脅? 您有什麼工具可以推薦給其他讀者嗎? 如果是這樣,請在下面發表評論,並繼續與您的讀者同行進行這一重要對話。