您知道17 年前首次發現SQL 注入攻擊嗎?然而,它仍然在OWASP 十大漏洞列表中名列前茅。這個漏洞是什么?它如何影響您的應用程序?你能為這個做什么?這是幫助您了解此 OWASP 十大漏洞及其業務影響的指南。如何停止 SQL 注入?您可以先通過AppTrana 免費試用了解您的網站是否存在 SQL 注入風險。
什么是數據庫和 SQL?
數據庫是一組描述的表,可以從中訪問或存儲數據。使用數據庫的應用程序需要一種媒介來在前端和數據庫之間進行通信。這就是 SQL 發揮作用的地方。結構化查詢語言 (SQL) 是一種用于訪問和操作數據庫中數據的語言。應用程序可以使用 SQL 語句與數據庫進行通信。使用 SQL 語句,應用程序可以執行一些標準的 SQL 命令,例如“SELECT”、“UPDATE”、“INSERT”、“DELETE”、“CREATE”、“DROP”。
SQL 注入代表什么?
大多數 Web 應用程序使用稱為結構化查詢語言 (SQL) 的機器可理解的語言與數據庫進行交互。攻擊者使用 Web 應用程序中的輸入字段在服務器上運行任意查詢(注入);因此,攻擊過程稱為 SQL 注入或SQLi 攻擊。
- 黑客使用您的輸入字段注入惡意代碼。
- 服務器執行從瀏覽器接收到的代碼。
- 一旦黑客獲得控制權,他就可以竊取、編輯、刪除敏感數據或利用其他管理員權限。
常見的 SQL 注入攻擊會導致知識丟失或拒絕訪問。然而,多年來,黑客將這些攻擊與身份驗證不足、DNS 劫持、XSS 和 DDoS 相結合,造成嚴重的經濟損失和絕對的主機接管。以下是近年來最著名的一些 SQL 攻擊。
- 2010 年 3 月:Albert Gonzalez 被判處 20 年徒刑。他將自己的代碼安裝到Heartland Payment Systems的信用卡服務器中,并竊取了 1.3 億個信用卡號碼。該公司的攻擊成本約為 1200 萬美元。
- 2012 年 6 月: 未經證實的 SQL 攻擊導致俄羅斯黑客從LinkedIn.com獲取了 650 萬用戶憑據。
- 2012 年 7 月: 雅虎語音用戶的 453,000 個電子郵件地址和密碼被泄露
- 2014 年 10 月: Drupal宣布其對攻擊的高度脆弱性。
- 2015 年 2 月: 100 萬個WordPress網站易受 SQL 注入攻擊
- 2020 年 8 月: SQL 注入攻擊導致 Freepik 和 Flaticon 用戶的 830 萬條記錄泄露。
- 2021 年 7 月: SQL 注入為 Kaseya 的勒索軟件攻擊打開了大門。
- 2021 年 7 月: WooCommerce 披露其多個功能插件和軟件版本易受 SQL 注入攻擊,他們注意到在此期間發生了數次安全攻擊。
為什么應用程序容易受到 SQL 注入的攻擊?
當未經適當驗證的用戶輸入直接作為 SQL 查詢傳遞給 SQL 解釋器以進行處理時,應用程序很容易受到 SQL 注入的攻擊。這導致執行用戶輸入并提供預期的結果。
下面的場景解釋了一個 Web 應用程序,它接受用戶的用戶名和密碼,并直接傳入要執行的查詢
案例 1:應用程序接受用戶輸入并傳入 SQL 查詢
案例 2:在用戶名參數中添加了單引號。結果,數據庫運行以下查詢
由于 OR 1=1,' WHERE 子句從表 users 中返回第一個 id。成功執行此 SQL 命令后,攻擊者可以繞過身份驗證。
企業上的大規模自動化 SQL 注入機器人
攻擊者怎么知道你的漏洞?
步驟1:
攻擊者使用包括機器人和軟件在內的自動化機制掃描數千個網站以尋找 SQL 注入。一些最常測試的字段是 URL 和表單。在這里很難停止 SQL 注入。
第2步:
審判。他分析漏洞的嚴重性并滲透到數據庫中。
第 3 步:
精心設計了一個虛假輸入命令,牢記漏洞,然后在該時間段內對其進行測試。如果它授予對數據庫的訪問權限,攻擊者可以誘騙應用程序泄露所有記錄。
第4步:
更致命的攻擊者會尋找其他漏洞并同時利用它們來獲取非法經濟收益和主機控制權。
例子:
登錄表單是驗證用戶的最常用方法之一。
驗證功能對應的服務器代碼為:

現在,黑客只需在任一輸入框中輸入“或”“=”即可驗證 SQL。它將為他提供表用戶中的所有行。
如何防止 SQL 注入攻擊?
防止或減輕 SQL 注入攻擊在很大程度上要確保沒有一個字段容易受到無效輸入和應用程序執行的影響。您無法手動檢查網站上的每個頁面和每個應用程序,尤其是當更新頻繁且用戶友好性是重中之重時。盡管如此,安全分析師和經驗豐富的開發人員推薦了一些后續要點,以確保您的數據庫平方在服務器的限制內得到很好的保護。
1)連續掃描和滲透測試
很長一段時間以來,自動化Web 應用程序掃描器?一直是指出 Web 應用程序中漏洞的最佳選擇。現在,隨著 SQL 注入在利用邏輯缺陷方面變得越來越聰明,網站安全專業人員應該在安全供應商的幫助下探索手動測試。
他們可以根據一組語法、類型和長度規則來驗證用戶輸入。它有助于謹慎地審核應用程序漏洞,以便您可以在黑客利用它之前修補代碼。
2)限制權限
它更像是一種數據庫管理功能,但對特定帳戶強制執行特定權限有助于防止盲目 SQL 注入攻擊。從無特權帳戶開始,然后轉到“只讀”、“編輯”、“刪除”和類似的特權級別。最小化應用程序的權限將確保通過應用程序進入數據庫的攻擊者無法未經授權使用特定數據。
3)使用查詢參數
動態查詢給安全專業人員帶來了很多麻煩。他們必須處理每個應用程序中的可變漏洞,這些漏洞只會隨著更新和更改而變得更加嚴重。建議您準備參數化查詢。
這些查詢簡單,易于編寫,并且只有在明確定義了 SQL 代碼中的每個參數時才通過。這樣,您的信息將配備武器以區分代碼和信息輸入。
4)即時保護
大多數組織都未能解決諸如過時的代碼、缺乏測試和更改資源、不了解應用程序安全性以及應用程序頻繁更新等問題。對于這些,Web 應用程序保護是最好的解決方案。
可以部署托管Web 應用程序防火墻以立即緩解此類攻擊。它包含自定義策略以阻止任何可疑輸入并立即拒絕信息泄露。這樣,您就不必在事后手動查找漏洞和修復問題。