php: почему этот неправильный способ запроса баз данных не уязвим - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть этот конкретный код (это mwe), и я не могу понять, почему не возникает ошибка MySQL при печати в файлах журналов браузера или apache:

$sql= "SELECT * from vulnDB where username = admin and password = '" . $_POST['password'] ."'";

if($result = mysqli_query($conn, $sql)) {
   $row = mysqli_fetch_assoc($result);
   if ($_POST['password'] == $row['password']) {
     echo "Welcome!";
   } else {
     echo "This password is incorrect";
   }   
} else {
   echo "Error";
}   

Когда я ввожу допустимые значения,код выполняется правильно (Welcome или This password is incorrect), когда я ввожу " или ', я достигаю условия Error, но ничего не печатается, и этот код кажется невосприимчивым к SQLi.

Есть ли какая-то особая защита в PHP, чтобы в любом случае избежать внедрения SQLi?Надлежащая защита будет заключаться в использовании PDO, но я нашел этот код, который, очевидно, кажется уязвимым;и не может вызвать синтаксис ошибки sqli или другие мысли о нем, выводится только «ошибка».

1 Ответ

0 голосов
/ 08 февраля 2019

Чтобы вставить SQL полезным способом, вам нужно сделать оператор SQL действительным с вашим параметром, введенным в строку .Простое введение ' не превратится в действительный SQL.(В результате получится что-то вроде SELECT * from vulnDB where username = admin and password = '''.)

. Чтобы создать работающую атаку, вам нужно ввести что-то вроде ' OR password IS NOT NULL AND '' = ' (примечание: я не проверял это).

Если вы не используете подготовленные операторы и печатаете строку из пользовательского ввода непосредственно в выполняемый SQL, вы уязвимы для внедрения SQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...