2011-06-15 69 views
0

我試圖檢查一個網站的SQL注入攻擊,並驚訝地看到它不是很簡單,以防止因爲下面是簡單的代碼。爲什麼我不能做SQL注入測試使用mysql和php

$sql="select * from user_acount where login_id='".$username."' and password='".$password."' and status='1' "; 

我不能做任何SQL注入來測試它。我寫了下面

1日嘗試檢查SQL注入無法登陸

Login: admin'-- 
Password:'i typed nothing here ' 

結果密碼錯誤。

第二:

您無法登錄
Login: admin or 1=1 --' 
Password:'' 

結果密碼錯誤。

3:

Login: admin' or 1=1 
Password:'' 

4: 登錄:admin或1 = 1 ' - 密碼:'」

您無法登錄

結果密碼錯誤。

任何人都可以請解釋什麼阻止我?我沒有使用準備好的語句,我也沒有使用任何過濾器類,我沒有real_escape_string?

+0

我無法想象有多少網站魔法報價已經挽救了生命 – dynamic 2011-06-15 09:20:08

+0

您是否將發佈的密碼與DB中的密碼進行比較?也就是說,你有類似'if($ password!= $ row ['password']){showError('密碼錯誤,你不能登錄'); }'? – binaryLV 2011-06-15 09:22:35

+0

所以這是100%sql注入安全代碼,因爲magic_qoute啓用了簡單易用的方法來保護sql注入。不是 – 2011-06-15 09:33:41

回答

4

兩種可能性:

  1. 沒有login_idadmin,因此查詢的樣子:

    select * from user_acount where login_id='admin' 
    
  2. magic_quotes已啓用,從而導致類似的查詢:

    select * from user_acount where login_id='admin\'--' and password='' and status='1' 
    select * from user_acount where login_id='admin or 1=1 --\'' and password='' and status='1' 
    

    最後的查詢總是會失敗,即使魔術引號被關閉:

    select * from user_acount where login_id='admin or 1=1 --'' and password='' and status='1' 
    

    因爲字符串內--意見不工作,查詢這樣解釋:

    select * from user_acount where login_id='STRING'' and password='' and status='1' 
    

    正如你所看到的,這將導致語法錯誤'STRING'

+0

感謝這是偉大的,所以這意味着100%的SQL注入安全嗎? – 2011-06-15 09:32:54

+1

只要沒有涉及特殊字符集,是的。 **但是不要依賴它**,它在PHP 5.3中被棄用,並且可能在將來被刪除。你最好用'mysql_real_escape_string'這樣的函數來使用預處理語句或轉義數據。 – Lekensteyn 2011-06-15 09:40:59

5
  • Magic Quotes可能會打開(所以用戶輸入會自動處理以更好地組合數據庫查詢)。
  • Register Globals可能被關閉(所以你將不得不使用$_REQUEST['username']或相關而不是$username)。
  • 程序中可能存在一個錯誤,它可以防止輸入admin'--被存儲在$username中(例如,表單元素名稱與變量名稱不匹配)。
1

您輸入的密碼包含引號。這打破了你的SQL查詢,大概這個代碼並沒有區分錯誤和合法的「沒有這樣的用戶」結果,所以你得到了錯誤的密碼信息。

嘗試將密碼留空。

1

你實際上並沒有調用real_escape_string()方法,但我認爲magic_quotes_gpc設置爲true。

當magic_quotes的是,所有「 (單引號),」(雙引號),\ (反斜線)和NUL與 反斜槓自動轉義。

Runtime Configuration - magic_quotes_gpc

1

你有沒有試過用:

Login: admin' or '1=1 
Password: admin' or '1=1 

同時檢查魔術現狀tes開啓了

相關問題