2010-07-01 73 views
0

我的查詢用PHP編寫的是:SQL注入的PHP

$sql="SELECT * FROM ".TABLE_PREFIX."login WHERE username ='".$username."' 
     AND password='".$password."'"; 
$res_id = mysql_query($sql); 
$num_rows = mysql_num_rows($res_id); 
echo $num_rows; 

,當我從它好的工作表單中輸入有效的用戶名和密碼。

在i輸入一些SQL注入代碼查詢輸出是:

SELECT * FROM form_login WHERE username ='' or '1'='1' AND password='' or '1'='1' 

這是一個有效的SQL statement.But它給出了一個輸出(即行數)爲0(零)。

如果我寫的程序本身相同的輸出sql語句原樣

$sql="SELECT * FROM form_login WHERE username ='' or '1'='1' 
    AND password='' or '1'='1'"; 

它工作正常,並給出了一些結果(例如3)。

我怎樣才能得到正確的結果通過輸入sql注入代碼?

+0

什麼是你的用戶名和密碼框輸入確切的文本? – cjk 2010-07-01 07:31:58

回答

0

在查詢中使用任何變量之前,請將其傳遞給mysql_real_escape_string

+2

我認爲在這種情況下,他希望有一個SQL注入;) – DrColossos 2010-07-01 07:41:52

+0

不是「任何變量」,而是變量,只能用引號引起來。所以,剩下的一定有一些東西。 – 2010-07-01 07:54:14

1

嘗試回顯SQL語句。這可能不是你想象的那樣,特別是如果啓用了magic_quotes_gpc

+0

我回應了sql語句,我的sql語句就像我在問題中給出的一樣。 SELECT * FROM form_login WHERE username =''or'1'='1'AND password =''or'1'='1',但結果不是來的。 – Sitansu 2010-07-01 09:05:55

1

或更好的是,從來沒有CONCATENATE SQL!

嘗試使用PDO庫prepared sql statements

值是在這種模式本質安全。

0

您需要輸入' OR 1=1; --(注意後面的空格)進入用戶名。
之後,你輸入密碼並不重要,因爲它會被註釋掉。

這將轉化成下面的SQL語句:

SELECT * FROM form_login WHERE username ='' or 1 = 1; -- AND password= 'whatever'