」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 逃避單一引號是針對SQL注入的可靠防禦嗎?

逃避單一引號是針對SQL注入的可靠防禦嗎?

發佈於2025-03-23
瀏覽:219

Is Escaping Single Quotes a Reliable Defense Against SQL Injection?

SQL注入防護:單引號轉義的謬誤

在軟件開發領域,防止SQL注入攻擊至關重要。雖然參數化SQL查詢是輸入清理的最佳方法,但一些開發人員仍然採用轉義單引號並將用戶輸入用單引號括起來作為替代的防禦機制。

有缺陷的轉義技術

該方法包括將用戶輸入中的任何單引號替換為雙單引號,並將整個字符串用單引號括起來:

sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'"

這種技術的原理是,用戶輸入的任何單引號都被有效地中和,防止字符串終止。因此,任何其他字符,例如分號或百分號,都成為字符串的一部分,而不會作為命令執行。

注入漏洞

但是,這種技術無法處理用戶輸入本身可能包含雙單引號的情況。在這種情況下,字符串會終止,其餘輸入可以作為SQL命令執行。

示例輸入

為了說明這一點,請考慮以下用戶輸入:

'SensitiveData' HAVING AMOUNT>2000 OR ''=''

執行後,代碼將變為:

SELECT * FROM ACCOUNT WHERE NAME='SensitiveData' HAVING AMOUNT>2000 OR ''=''

此輸入成功地將OR子句注入到SQL查詢中,繞過了預期的清理。

進一步的考慮

務必注意,這種轉義技術存在其他漏洞,包括:

  • 不能防御所有類型的SQL注入攻擊,例如使用註釋或其他語句終止符的攻擊。
  • 引入性能和維護開銷。
  • 導致代碼難以閱讀和理解。

最佳實踐

不要依賴臨時輸入清理技術,請遵循以下最佳實踐以防止SQL注入:

  • 使用參數化SQL查詢或JDBC預準備語句。
  • 只允許預期的輸入值和格式(白名單)。
  • 僅在絕對必要且在實施其他緩解措施後才使用黑名單。
  • 避免動態SQL和字符串連接。
  • 考慮使用具有有限數據庫權限的存儲過程。
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3