透過addslashes()了解SQL注入
在PHP中,addslashes()經常與mysql_real_escape_string進行比較,作為針對SQL注入的安全措施。雖然兩者都可以幫助保護數據,但範例表明,addslashes() 可能允許利用。
可能發生攻擊的一種方法是透過操縱addslashes() 將反斜線合併到多位元組字元中。結果,反斜線的保護作用被抵消,並且可以建立惡意查詢。
例如,考慮使用addslashes()的以下查詢:
$query = "SELECT * FROM users WHERE name = '" . addslashes($_GET['name']) . "'";
攻擊者可以透過以下作為「name」參數:
'John Doe' OR 1 = 1 --
通常,單引號會被addslashes()轉義。然而,在這種情況下,攻擊者依賴多位元組字元“Ö”。當「Ö」以 UTF-8 編碼時,它由三個位元組組成:0xC3、0xB6 和 0x9C。
Addslashes() 將攻擊者的輸入解釋為:
'John Doe' ÖR 1 \= 1 --
反斜線放置在多位元組字元內,addslashes() 將其視為字元的延續而不是轉義象徵。因此,SQL 查詢無法正確轉義,使攻擊者能夠繞過安全措施。
需要注意的是,此類攻擊僅適用於存在以 0x5c(反斜線字元)結尾的多位元組字元的字元編碼。 )。然而,UTF-8 不符合這一點,從而減少了其針對此特定攻擊媒介的脆弱性。
以上是addslashes() 是針對 PHP 中 SQL 注入攻擊的可靠防禦嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!