2013-04-02 53 views
9

我想用PHP/Mysql注入一個登錄示例,我的代碼如下。PHP MySQL注入示例?

我曾嘗試與anything' --用戶名和密碼爲空,但它不工作,我無法登錄。

誰能幫助我?

<?php 
mysql_connect('localhost','root','root'); 
mysql_select_db('hp'); 
?> 

<form action="" method="post"> 
<table width="50%"> 
    <tr> 
     <td>User</td> 
     <td><input type="text" name="user"></td> 
    </tr> 
    <tr> 
     <td></td> 
     <td><input type="text" name="password"></td> 
    </tr> 
</table> 
    <input type="submit" value="OK" name="s"> 
</form> 

<?php 
if($_POST['s']){ 
    $user = $_POST['user']; 
    $pass = $_POST['password'];  
    $re = mysql_query("select * from zend_adminlist where user_name = '$user' and password = '$pass'"); 

    if(mysql_num_rows($re) == 0){  
     echo '0'; 
    }else{ 
     echo '1'; 
    } 
} 
?> 
+8

不重複。他想注射,而不是阻止。 – itachi

+0

@itachi無論如何它太本地化了。 –

+3

@itachi如果您閱讀文章,問題顯示SQL注入,並且答案是預防。 –

回答

19

一個最常見的例子是這樣的查詢:

' or '1'='1 

如果您輸入此作爲用戶名和密碼進入一些unsanitized登錄輸入類似查詢變化,使:

Original: SELECT * FROM USERS WHERE USER='' AND PASS=''; 
Modified: SELECT * FROM USERS WHERE USER='' or '1'='1' AND PASS='' or '1'='1'; 

這使得它尋找的每個東西都是真實的,因爲1總是等於1.這種方法的問題是它不允許選擇特定的用戶。這樣做,您需要通過評論它來忽略AND語句,如其他示例中所示。

8

如果用戶名的值是:

$_POST['user'] = "1' OR 1 LIMIT 1; --"; 

然後MySQL查詢變爲:

select * 
from zend_adminlist 
where user_name = '1' OR 1 LIMIT 1; --' and password = '$pass' 
+0

不是每個查詢只允許1行嗎? – lemondrop

+0

1行,這是真的,但一行代表一個查詢分隔符:';' '-'-表示它後面的代碼被註釋掉了。所以上面的查詢實際上是一個查詢。我只是將行分解爲代碼readeable。 – Kovge

+0

啊我不知道。 – lemondrop