在軟體開發領域,防止SQL注入攻擊至關重要。雖然參數化SQL查詢是輸入清理的最佳方法,但一些開發人員仍然採用轉義單引號並將使用者輸入用單引號括起來作為替代的防禦機制。
有缺陷的轉義技術
該方法包括將使用者輸入中的任何單引號替換為雙單引號,並將整個字串用單引號括起來:
<code>sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'"</code>
這種技術的原理是,使用者輸入的任何單引號都被有效地中和,防止字串終止。因此,任何其他字符,例如分號或百分號,都成為字串的一部分,而不會作為命令執行。
注入漏洞
但是,這種技術無法處理使用者輸入本身可能包含雙單引號的情況。在這種情況下,字串會終止,其餘輸入可以作為SQL指令執行。
範例輸入
為了說明這一點,請考慮以下使用者輸入:
<code>'SensitiveData' HAVING AMOUNT>2000 OR ''=''</code>
執行後,程式碼將變成:
<code>SELECT * FROM ACCOUNT WHERE NAME='SensitiveData' HAVING AMOUNT>2000 OR ''=''</code>
此輸入成功地將OR子句注入到SQL查詢中,繞過了預期的清理。
進一步的考量
務必注意,這種轉義技術存在其他漏洞,包括:
最佳實務
不要依賴臨時輸入清理技術,請遵循以下最佳實踐以防止SQL注入:
以上是轉義單引號可以可靠地防禦 SQL 注入嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!