Я написал код в php, который позволяет администратору входить в систему. Информация о пароле выводится из таблицы. Я знаю, что не очень хорошая практика писать такой код, и я должен использовать подготовленный оператор или mysqli_, но я просто хочу узнать о уязвимости sql-запроса. Я просто хочу знать, как мой код уязвим для SQL-инъекций? Как я могу обойти ограничение пароля. Я попробовал ввести пароль = «ничего» ИЛИ «x» = «x» в поле пароля, но он не обходит его. Это мой код: -Тестирование запроса для SQL-инъекции
if(isset($_POST["Submit"]))
{
include 'db_connect.php';
$user=$_POST['user'];
$pass=$_POST['pass'];
$checkquery="select * from adminlogin where password='$pass' ";
$queryex= mysql_query($checkquery);
$row= mysql_fetch_array($queryex);
$checkcasepass = $row['password'];
if($user=='admin' && strcmp($checkcasepass,$pass)==0)
{
setcookie("admin",$user);
setcookie ("student", "", time() - 3600);
header("location: admin option.php");
}
else
{
echo "Sorry User Name and Password is Wrong";
}
}
я изменил строку запроса к этому для целей тестирования: -
$checkquery="select * from adminlogin where password='$pass' OR 1=1 ";
, но это не сработало. Может ли это быть из-за магических котировок? Но я использую PHP 5.4.3, а магические кавычки уже амортизируются. Мне интересно, почему SQL-инъекция не работает. ?
Вы должны использовать 'PDO', если вы можете ему помочь,' mysql_ * 'функции официально устарели. Узнайте о [* подготовленных операторах *] (http://j.mp/T9hLWi) и используйте [PDO] (http://php.net/pdo) или [MySQLi] (http://php.net/ MySQLi). Проверьте [это сравнение] (http://j.mp/QEx8IB), и если вы выберете PDO, [вот хороший учебник] (http://j.mp/PoWehJ). –
@dirt В то время как вы очень правильно заявляете об этом, пользователь конкретно говорит, что понимает это и хочет понять, как работает инъекция – RMcLeod
, почему бы вам просто не отозвать ** результирующий запрос и опубликовать его здесь? –