почему я не могу сделать SQL инъекций, используя MySQL и PHP - PullRequest
0 голосов
/ 15 июня 2011

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

$sql="select * from user_acount where login_id='".$username."' and password='".$password."' and status='1' ";

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

1-я попытка проверить SQL инъекцию

Login:  admin'--
Password:'i typed nothing here '

Результат Неверный пароль, вы не можете войти.

2nd:

Login:  admin or 1=1 --' 
Password:''

Результат Неправильный пароль. Вы не можете войти в систему.

3-й:

Login:  admin' or 1=1 
Password:''

4-й: Логин: admin или 1 = 1 '- Пароль:' '

Результат Неверный пароль, вы не можете войти.

Может кто-нибудь объяснить, что мне мешает?я не использую подготовленные операторы, не использую какой-либо класс фильтра, и у меня нет real_escape_string?

Ответы [ 5 ]

5 голосов
/ 15 июня 2011
  • Магические кавычки может быть включено (поэтому пользовательский ввод автоматически обрабатывается, чтобы лучше подходить для составления запросов к базе данных).
  • Register Globals может быть отключено (поэтому вам придется использовать $_REQUEST['username'] или связанный с ним вместо $username).
  • В вашей программе может быть ошибка, из-за которой ввод admin'-- не сохраняется в $username (например, имена элементов формы не совпадают с именами переменных).
4 голосов
/ 15 июня 2011

Две возможности:

  1. Нет login_id с admin, поэтому запрос выглядит так:

    select * from user_acount where login_id='admin'
    
  2. magic_quotes включены, что приводит к таким запросам, как:

    select * from user_acount where login_id='admin\'--' and password='' and status='1'
    select * from user_acount where login_id='admin or 1=1 --\'' and password='' and status='1'
    

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

    select * from user_acount where login_id='admin or 1=1 --'' and password='' and status='1'
    

    Поскольку -- комментарии в строках не работают, запрос интерпретируется как:

    select * from user_acount where login_id='STRING'' and password='' and status='1'
    

    Как видите, это приведет к синтаксической ошибке после 'STRING'

1 голос
/ 15 июня 2011

Вы пробовали с:

Login:  admin' or '1=1  
Password: admin' or '1=1

Также проверьте, включены ли магические кавычки

1 голос
/ 15 июня 2011

Вы на самом деле не вызываете метод real_escape_string(), но я думаю, magic_quotes_gpc установлено в true.

Когда включены magic_quotes, все (одинарная кавычка), "(двойная кавычка) \ (обратная косая черта) и NUL экранированы обратная косая черта автоматически.

Конфигурация во время выполнения - magic_quotes_gpc

1 голос
/ 15 июня 2011

Вы вводите пароль, который включает в себя кавычки. Это нарушает ваш SQL-запрос, и, вероятно, код не различает ошибку и законный результат «нет такого пользователя», поэтому вы получаете сообщение о неверном пароле.

Попробуйте оставить пароль пустым.

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