Вопрос обхода проверки подлинности SQL-инъекций - PullRequest
0 голосов
/ 05 мая 2019

Я сделаю это коротким и сразу перейду к делу.

Я тестирую обход входа в SQLI на PHP-коде, который я сделал ниже.

if(isset($_POST["login"]) && isset($_POST["password"])){


$sql="select * from users where login='{$_POST["login"]}' and password='{$_POST["password"]}'";


$result=mysqli_query($conn, $sql);


if(mysqli_num_rows($result) != 0)
    echo "<h1>Login Success!</h1>";


else
    echo "<h1>Invalid Login!</h1>";


} 

Я использую admin '- в качестве поля для входа в систему, чтобы успешно обойти регистрацию без ввода пароля.

Но проблема в том, что это не работает, но когда я пытался использовать это admin' -- '- вместо этого он работает.

Итак, вопрос в том, как и почему этот конкретный шпаргалка работает вместо, а не первого?

This admin' -'- работает, но не это admin' -

Это код на стороне сервера, когда я вхожу в эти 2 шпаргалки.

Обход, которыйне работает.

$sql="select * from users where login='admin' --' and password='{$_POST["password"]}'"; 

Обход, который работает.

$sql="select * from users where login='admin' -- ' --' and password='{$_POST["password"]}'"; 

Просто нужны некоторые пояснения или объяснения о том, как и почему первый шпаргалка не работает, но второйработает.Спасибо!

1 Ответ

0 голосов
/ 05 мая 2019

В вашем коде есть некоторые реальные синтаксические ошибки:

Во-первых: не делайте что-то вроде этого: $sql="select * from users where login='{$_POST["login"]}' and password='{$_POST["password"]}'";

Правильный способ - создать переменную, равнуюзначение логина и пароля.Пример:

$login=$_POST['login'];
$password=$_POST['password'];

После этого ваш запрос должен выглядеть следующим образом:

$sql="select * from users where login='$login' and password='$password'";
...