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