2014-12-18 5 views
-2

В настоящее время я обучающегося о инъекции SQL, я попыталсяLearning SQL инъекции

test ="'); DROP TABLE users; '"; 

Это Напитки вверх сообщение об ошибке

mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\my portable files\sqlinjection\login.php on line 18 

Войти код

session_start(); 

$username = $_POST['username']; 
$password = $_POST['password']; 
$errors = array(); 


if ($username&&$password) 
{ 

$connect = mysql_connect("localhost","root","") or die ("Could not connect"); 
mysql_select_db ("login") or die ("Could not find database"); 

$query = mysql_query("SELECT * FROM users WHERE username ='$username'"); 

$numrows = mysql_num_rows($query); 
if ($numrows !=0) 
{ 
    while ($row =mysql_fetch_assoc($query)) 
    { 
     $dbusername = $row['username']; 
     $dbpassword = $row['password']; 
    } 

    if ($username==$dbusername&&$password==$dbpassword) 
    { 
     echo header('Location: member.php') ; 
     $_SESSION['username']=$dbusername; 
    } 
    else 
     echo "Incorrect password"; 

} 
else 
    die("That user dosen't exist"); 






} 

else 
    die("Please enter a username and a password"); 





?> 

Где я буду неправильно или это результат ожидания? Я посмотрел на свою базу данных, и стол был там, поэтому я догадался, что это было неправильно. ОБНОВЛЕНО показать код входа.

+0

Можете ли вы задать запрос, который хотите изменить? –

+0

Ввод кода и SQL-инъекция - это разные вещи IMHO – ne1410s

+0

Я использую код входа, вы имеете в виду запрос на этой странице? –

ответ

2

если вы запрашиваете является:

"SELECT * FROM users WHERE username ='$username'" 

тогда ваша username переменная должна быть:

$username = "foo'; DROP TABLE users;"; 

В этом случае становится ваш окончательный запрос:

"SELECT * FROM users WHERE username ='foo'; DROP TABLE users;" 

Чтобы предотвратить эту инъекцию вы следует использовать параметры или, по крайней мере, использовать серверную функцию, которая удаляет все специальные символы m ваша переменная, прежде чем включать ее в ваш запрос (см .: How can I prevent SQL-injection in PHP?)

+0

Спасибо, я прочитаю добавленную вами ссылку. –

Смежные вопросы