首頁 > 後端開發 > Python教學 > 如何偵測和防禦SQL注入攻擊(部分必讀)

如何偵測和防禦SQL注入攻擊(部分必讀)

Patricia Arquette
發布: 2024-11-30 22:33:15
原創
912 人瀏覽過

How to Detect and Defend Against SQL Injection Attacks(Part-Must Read]

作者:Trix Cyrus

Waymap滲透測試工具:點這裡
TrixSec Github:點這裡
TrixSec Telegram:點此


SQL 注入是 Web 應用程式中最常見且最危險的漏洞之一。當攻擊者能夠操縱應用程式執行的 SQL 查詢,從而允許他們以未經授權的方式存取或修改資料時,就會發生這種情況。在本文中,我們將介紹如何偵測和防禦 SQL 注入攻擊。


什麼是 SQL 注入?

SQL 注入 (SQLi) 是一種攻擊類型,攻擊者將惡意 SQL 程式碼插入或「注入」到查詢中,然後由資料庫伺服器執行。此漏洞是由於輸入驗證不佳而引起的,用戶輸入未經適當的清理就直接包含在 SQL 查詢中。

例如:

SELECT * FROM users WHERE username = 'admin' AND password = 'password123';
登入後複製
登入後複製

如果攻擊者可以將自己的 SQL 注入到查詢中,如下所示:

' OR 1=1; --
登入後複製
登入後複製

產生的查詢可能會變成:

SELECT * FROM users WHERE username = '' OR 1=1; --' AND password = '';
登入後複製

這將導致資料庫傳回所有用戶,完全繞過身份驗證。


如何偵測 SQL 注入攻擊

1.使用自動化工具進行檢測

許多安全工具可以掃描您的應用程式是否有 SQL 注入漏洞。一些流行的工具是:

  • SQLmap:自動偵測並利用 SQL 注入漏洞的強大工具。
  • Waymap:自動偵測 SQL 注入漏洞和 75 個其他 Web 漏洞的強大工具。
  • OWASP ZAP:Web 應用程式安全掃描器,包括各種主動和被動 SQL 注入測試。
  • Burp Suite:滲透測試工具,提供SQL注入掃描功能。

2.手動測試

  • 嘗試將常見的 SQL 注入負載插入使用者輸入欄位。例如:

    • ' 或 1=1 --
    • ' 或 'a' = 'a
    • ' AND 'x'='x
  • 檢查錯誤訊息:許多資料庫錯誤訊息可以揭示有關底層資料庫和查詢結構的詳細資訊。例如:

    • MySQL:您的 SQL 語法有錯誤...
    • PostgreSQL:錯誤:整數型別的輸入語法無效

3.使用基於錯誤的盲注入技術

  • 基於錯誤的注入:透過故意引發錯誤,攻擊者可以從錯誤訊息中收集有用的信息。
  • 盲 SQL 注入:在停用錯誤訊息的情況下,攻擊者可以提出真/假問題,從而根據應用程式的回應洩漏資訊。

如何防禦 SQL 注入攻擊

1.使用準備好的語句(參數化查詢)

針對 SQL 注入最有效的防禦方法是使用具有參數化查詢的準備好的語句。這確保用戶輸入被視為數據,而不是可執行代碼。

使用 MySQL 的 Python 範例(使用 MySQLdb 函式庫):

SELECT * FROM users WHERE username = 'admin' AND password = 'password123';
登入後複製
登入後複製

在這個範例中,%s是使用者輸入的佔位符,MySQL會自動轉義特殊字符,使得攻擊者無法注入惡意SQL。

2.使用 ORM(物件關係映射)框架

許多 Web 開發框架(例如 Django、Flask)提供 ORM 層來與資料庫互動。 ORM 產生安全的 SQL 查詢並透過自動轉義使用者輸入來防止 SQL 注入。

例如使用Django的ORM:

' OR 1=1; --
登入後複製
登入後複製

此查詢不會受到 SQL 注入的影響,因為 Django 的 ORM 會處理輸入清理。

3.驗證與清理輸入

  • 白名單輸入:僅允許預期的輸入,尤其是在使用者名稱和密碼等欄位中。例如,使用者名稱中僅允許使用字母數字字元。
  • 轉義輸入:如果必須動態建立 SQL 查詢(不建議),請確保使用適當的轉義函數轉義特殊字元。
  • 使用正規表示式:在處理之前確保使用者輸入與預期模式相符。

4.使用 Web 應用程式防火牆 (WAF)

WAF 可以透過檢查傳入的 HTTP 請求並過濾掉惡意負載來即時阻止惡意 SQL 注入嘗試。一些流行的 WAF 是:

  • ModSecurity:適用於 Apache、Nginx 和 IIS 的開源 WAF。
  • Cloudflare:提供易於使用的 WAF,防止 SQL 注入和其他攻擊。

5.對資料庫帳號使用最低權限

確保應用程式使用的資料庫帳戶具有最小權限。例如:

  • 應用程式的資料庫使用者不應具有刪除或更改表的權限。
  • 使用不同的帳戶進行唯讀和寫入操作。

6.錯誤處理與日誌記錄

  • 不要暴露資料庫錯誤:配置您的應用程式以優雅地處理資料庫錯誤,而不會洩露敏感資訊。例如,避免向最終用戶顯示詳細的錯誤訊息。
  • 啟用日誌記錄:記錄可疑活動並嘗試利用 SQL 注入漏洞以便日後分析。

SQL 注射預防檢查表

  1. 總是使用準備好的語句與參數化查詢。
  2. 使用ORM框架與資料庫互動。
  3. 清理並驗證使用者輸入(白名單、正規表示式等)。
  4. 實作Web 應用程式防火牆 (WAF)。
  5. 資料庫帳戶遵循最小權限原則。
  6. 盡可能避免在程式碼中直接執行 SQL
  7. 使用錯誤處理機制避免暴露敏感的資料庫資訊。
  8. 定期進行安全測試以識別漏洞。

結論

SQL 注入仍然是當今最普遍的安全威脅之一,但是透過採取正確的防禦措施,例如準備好的語句、輸入驗證和使用 ORM 框架,可以顯著降低 SQL 注入攻擊的風險您的申請。此外,定期測試您的應用程式是否存在 SQL 漏洞並應用最佳實踐將有助於保護您的系統並保護敏感的使用者資料。

透過保持主動和意識,您可以防止 SQL 注入攻擊的破壞性後果並確保應用程式的安全。

~Trixsec

以上是如何偵測和防禦SQL注入攻擊(部分必讀)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板