目前,大約有2 億個(gè)活躍網(wǎng)站,其中很少有僅由互聯(lián)網(wǎng)早期流行的靜態(tài) HTML 頁(yè)面組成。大多數現代站點(diǎn)在復雜的 Web 應用程序和數據庫的幫助下處理大量敏感數據。然而,我們很確定我們不會(huì )錯,說(shuō)許多網(wǎng)站所有者并不完全了解SQL 注入(或 SQLi)是什么。
網(wǎng)絡(luò )安全狀況
現代網(wǎng)絡(luò )安全環(huán)境是一個(gè)相當復雜的地方。網(wǎng)站攻擊的范圍比以往任何時(shí)候都更廣,現在有超過(guò)60% 的世界人口在互聯(lián)網(wǎng)上,目標的數量也是如此。作為網(wǎng)站所有者,您的首要任務(wù)應該是 Web 應用程序的安全性。您可能想聽(tīng)聽(tīng)一個(gè)名為OWASP的組織怎么說(shuō)。OWASP 代表Open Web Application Security Project ,是一個(gè)由志愿者和專(zhuān)家組成的在線(xiàn)社區,專(zhuān)門(mén)幫助網(wǎng)站管理員保護他們的項目。
每年,OWASP 的專(zhuān)家都會(huì )對管理員需要注意的最普遍的威脅進(jìn)行排名,并且在很長(cháng)一段時(shí)間內,代碼注入一直位居榜首。由于大多數現代網(wǎng)站使用的技術(shù),SQLi 是迄今為止最流行的代碼注入類(lèi)型。據安全公司Akamai稱(chēng),近三分之二的 Web 應用程序攻擊涉及 SQL 注入。SQLi 肯定不是您應該低估的威脅,但是是什么讓它如此獨特?
什么是 SQL 注入?
當最終用戶(hù)與網(wǎng)站交互時(shí),他們會(huì )看到一組文本和媒體文件正在排列和顯示在屏幕上。不過(guò),幕后還有很多事情要做?;谟脩?hù)的輸入,Web 應用程序運行數據庫查詢(xún)以訪(fǎng)問(wèn)正確的資源并顯示正確的內容。例如,在您輸入登錄憑據并點(diǎn)擊Sign In后,Web 應用程序會(huì )獲取您的用戶(hù)名和密碼并查詢(xún)數據庫以查看它們是否正確。如果是這種情況 - 您可以進(jìn)入您的個(gè)人資料。
SQL (結構化查詢(xún)語(yǔ)言的縮寫(xiě))是促進(jìn)這種通信的編程語(yǔ)言。Web 應用程序使用它根據用戶(hù)輸入生成數據庫查詢(xún)。在 SQL 注入場(chǎng)景中,攻擊者修改 SQL 查詢(xún)以接收來(lái)自數據庫的特定響應。使用惡意查詢(xún),他們可以獲得對敏感數據的未經(jīng)授權的訪(fǎng)問(wèn)或損害您的系統完整性。
SQL 注入作為一種攻擊媒介早在1998 年就被發(fā)現了, 但根據Acunetix的說(shuō)法,大約 8% 的現代網(wǎng)站仍然容易受到它的攻擊。此類(lèi)網(wǎng)站的所有者最好改進(jìn)他們的配置,因為成功的 SQLi 攻擊會(huì )造成很大的破壞。
未經(jīng)授權訪(fǎng)問(wèn)敏感信息(如登錄憑據、支付詳細信息和個(gè)人數據)可能會(huì )對任何在線(xiàn)業(yè)務(wù)造成災難性影響。更重要的是,成功的 SQL 注入可以打開(kāi)后門(mén),從而促進(jìn)針對整個(gè)組織的復雜攻擊。
SQL 注入是如何工作的?
與其他形式的網(wǎng)絡(luò )犯罪不同,SQL 注入工具并非在地下黑客論壇和市場(chǎng)上免費提供。自動(dòng)化流程的選項很少,攻擊者需要相對較高的技術(shù)技能。至少,黑客必須了解 SQL 查詢(xún)的工作原理。
首先,攻擊者確定他們的目標。幸運的是,由于威脅如此廣為人知,現代 Web 應用程序通常帶有某種形式的內置 SQLi 保護。對于從頭開(kāi)始構建網(wǎng)站的開(kāi)發(fā)人員,還有一些工具和行業(yè)最佳實(shí)踐。
不幸的是,缺乏標準化和糟糕的補丁管理意味著(zhù) SQLi 易受攻擊的網(wǎng)站仍然存在?,F代漏洞掃描程序可以快速識別它們。
攻擊者制作的查詢(xún)取決于數據庫的類(lèi)型和數據庫管理系統。下一步是對目標進(jìn)行一些偵察。
最后,啟動(dòng)實(shí)際注入。一些 SQLi 攻擊依賴(lài)于特定 HTTP 請求的更改,而在其他情況下,攻擊者使用基于 Web 的表單(例如,登錄頁(yè)面或搜索欄)來(lái)修改 SQL 查詢(xún)。
例如,黑客理論上可以使用網(wǎng)站的登錄表單在不知道管理員密碼的情況下獲得管理員權限。這是它的工作原理。
通常,當管理員登錄時(shí),登錄表單生成的 SQL 查詢(xún)如下所示:
SELECT * FROM members WHERE username = 'admin' AND password = '[the admin password]'
如果攻擊者將“ admin'- ”放入用戶(hù)名字段并將密碼字段留空,則查詢(xún)將如下所示:
SELECT * FROM members WHERE username = 'admin'- ' AND password = ”
' –緊跟在管理員用戶(hù)名之后會(huì )取消查詢(xún)的其余部分,這意味著(zhù)數據庫根本不會(huì )檢查密碼字段中是否有任何內容。
相反,它將簡(jiǎn)單地將攻擊者記錄為管理員,這就是噩夢(mèng)開(kāi)始的地方......
SQL 注入的類(lèi)型
根據它們產(chǎn)生的結果,您可以識別幾種不同類(lèi)型的 SQL 注入:
- SQL 注入檢查數據庫——這通常是攻擊者在確定可行目標后的待辦事項清單上的第一步。他們使用精心設計的 SQL 查詢(xún)來(lái)獲取特定于數據庫的信息,這有助于他們在接下來(lái)的攻擊階段。
- SQL 注入檢索隱藏數據——這種類(lèi)型的注入揭示了攻擊者無(wú)法訪(fǎng)問(wèn)的信息。例如,對 HTTP 請求的一次修改可以在易受 SQLi 攻擊的電子商務(wù)網(wǎng)站上顯示未列出的產(chǎn)品。
- SQLi UNION 攻擊——UNION SQL 運算符可用于在單個(gè)語(yǔ)句下組合多個(gè) SQL 查詢(xún)。因此,通過(guò)修改 SQL 查詢(xún),攻擊者可以使 Web 應用程序從通常無(wú)法訪(fǎng)問(wèn)的數據庫部分中抓取數據。這可能包括登錄憑據。
- 顛覆應用程序邏輯的 SQL 注入——干擾 Web 應用程序邏輯的能力為各種犯罪活動(dòng)打開(kāi)了大門(mén)。我們在上一節中概述的密碼繞過(guò)技術(shù)就是此類(lèi)攻擊的一個(gè)示例。
- SQL 盲注——SQL盲注更難實(shí)施,因為 SQL 查詢(xún)結果在數據庫的響應中不可見(jiàn)。但是,具有高級技術(shù)技能的攻擊者可以使用這些攻擊來(lái)觸發(fā)帶外網(wǎng)絡(luò )交互并促進(jìn)快速數據泄露。
如何防止 SQL 注入攻擊?
SQL 注入讓黑客有機會(huì )繞過(guò)身份驗證、竊取、修改和破壞數據,運行任意代碼,甚至獲得對服務(wù)器的訪(fǎng)問(wèn)權限。通常,攻擊速度很快,管理員通常不會(huì )意識到他們已經(jīng)被擊中,直到為時(shí)已晚。換句話(huà)說(shuō),您最好采取必要的步驟來(lái)防止 SQLi 攻擊,而不是在黑客已經(jīng)入侵您的站點(diǎn)后嘗試將所有內容重新組合在一起。
不同的項目需要不同的預防技術(shù)。例如,使用內容管理系統(CMS) 構建網(wǎng)站的管理員不需要手動(dòng)實(shí)施特定的反 SQLi 措施。CMS 開(kāi)發(fā)人員負責確保及時(shí)修補漏洞。Тhe 網(wǎng)站所有者唯一需要考慮的是在所有更新發(fā)布后立即應用它們。
自定義編碼網(wǎng)站管理員的工作更具挑戰性。沒(méi)有完全消除威脅的一勞永逸的措施清單。修補漏洞所需的確切步驟取決于您使用的編程語(yǔ)言、 SQL 數據庫引擎以及您嘗試修復的 SQL 漏洞的類(lèi)型。
不過(guò),您可以遵循一些提示來(lái)保護您的網(wǎng)站。
- 執行定期安全審計——漏洞掃描器可以相對容易地檢測到您站點(diǎn)中潛在的 SQLi 漏洞,您沒(méi)有理由不使用它們。掃描越頻繁——在為時(shí)已晚之前發(fā)現和修復 SQLi 漏洞的機會(huì )就越大。
- 確保您已做好應對威脅的準備——如果您是維護大型網(wǎng)站的大型組織,從 QA 專(zhuān)家到開(kāi)發(fā)負責人,每個(gè)人都需要了解 SQL 注入帶來(lái)的危險。定期向您的員工通報新的潛在攻擊也是確保他們采取適當措施的關(guān)鍵。
- 清理所有輸入——切勿直接使用任何輸入,無(wú)論它來(lái)自經(jīng)過(guò)身份驗證的用戶(hù)還是公共用戶(hù)。您的 Web 應用程序還必須具有清理請求和刪除潛在惡意代碼元素的機制。
- 使用久經(jīng)考驗的機制——有特定于語(yǔ)言的機制來(lái)保護應用程序免受 SQL 注入。做你的研究,看看哪些提供最好的保護。使用它們而不是手動(dòng)開(kāi)發(fā)自己的安全技術(shù)是一個(gè)更好的選擇。
- 隨時(shí)了解最新信息并使用最新工具——SQLi 攻擊不會(huì )停止發(fā)展,我們用于保護網(wǎng)站的機制也不會(huì )停止。如果您將您的網(wǎng)站隱藏在一項舊技術(shù)之后,您將面臨嚴重的風(fēng)險,使其容易受到最新的 SQL 注入攻擊。
- 部署 Web 應用程序防火墻——Web應用程序防火墻使用嚴格的規則來(lái)檢查和過(guò)濾 HTTP 交換。它阻止顯示 SQLi 模式的請求,是保護您的網(wǎng)站免受各種 Web 應用程序攻擊的最簡(jiǎn)單方法之一。
您的托管服務(wù)提供商的角色
SQL 注入以 Web 應用程序為目標——嚴格來(lái)說(shuō),這不是您選擇的托管公司的優(yōu)先事項。然而,一個(gè)好的主機不僅僅是一個(gè)服務(wù)提供商。它是幫助您保持在線(xiàn)業(yè)務(wù)持續發(fā)展的合作伙伴,因此,它將盡一切努力確保您的網(wǎng)站得到盡可能好的保護。
例如,如果您的項目基于 CMS,您可能會(huì )擁有一鍵式安裝程序。除了在幾秒鐘內設置 WordPress 等應用程序外,該工具還具有核心和附加組件的自動(dòng)更新功能 。
這樣,您就不會(huì )錯過(guò)任何重要的安全補丁。一個(gè)好的主機將幫助您部署Web 應用程序防火墻,并且還將包括一個(gè)監控系統,該系統會(huì )掃描您的整個(gè)主機帳戶(hù)以查找可疑行為,并在檢測到錯誤時(shí)通知您。
結論
盡管 SQL 注入在 20 多年前首次出現,但威脅仍然與以往一樣重要。2020 年 5 月,美國司法部指控一名黑客使用 SQL 注入竊取數千條信用卡詳細信息和其他個(gè)人信息。幾個(gè)月后,黑客利用 SQLi 攻擊從在線(xiàn)圖形資源網(wǎng)站 Freepik 竊取了超過(guò)800 萬(wàn)條記錄。這是一個(gè)嚴重的威脅,但好消息是,多年來(lái),安全專(zhuān)家已經(jīng)了解了很多關(guān)于 SQL 注入的知識?;谶@些知識,有許多工具和策略可以有效地阻止攻擊。由您選擇最方便的。