ПРИМЕЧАНИЕ: Это не вопрос о том, что является SQL-инъекцией , а скорее вопрос, чтобы выяснить, что является реальной уязвимостью, особенноприведены некоторые конкретные контрольные примеры.
Справочная информация: Пожалуйста, посмотрите это видео от группы под названием Modern Rouge .Или вы можете проигнорировать это, поскольку это упрощенно для людей, которые не имеют технических навыков и не знакомы с SQL-инъекцией .Я укажу нашу важную часть, когда это необходимо.
Итак, для тех, кто не знает, что такое SQL-инъекция (я просто добавляю это для полноты и чтобы дать справку по моему конкретному вопросу) Допустим, у меня есть PHP-код, подобный следующему:
$query = "SELECT * FROM users WHERE username='$username'";
Этот код уязвим, потому что, скажем, злоумышленник вводит свое имя пользователя как ' or 1=1;--
, это может сделать окончательный запрос
SELECT * FROM users WHERE username='' or 1=1;--'
Который не имеет ожидаемого эффекта.
Итак, теперь посмотрите видео около отметка 4:00 .
Пример, который они приводят на своихПротестируйте веб-сайт для внедрения SQL-кода, они используют SQL-инъекцию для обхода проверки пароля.
Вот что я не получаю. В реальной жизни я бы не стал проверять пароль в PHP вместо этого, делая этот конкретный пример бесполезным?Например:
if($userRecordFromDB["pwd"] == $pwd) { // User authenticated.
Прав ли я, что SQL-инъекция не может обойти мою аутентификацию PHP?В чем здесь уязвимость?Если я не связываю проверку пароля с моим запросом (который, я признаю, можно было бы сделать для примера), даже если у меня есть уязвимый запрос, мой сайт не должен быть уязвимым.
Второй связанныйвопрос: видео продолжает указывать, что одна уязвимость может позволить злоумышленнику получить доступ ко всей моей базе данных!Я предполагаю, что они подразумевают, что злоумышленник может сделать что-то вроде этого:
SELECT * FROM users WHERE username='' or 1=1; SELECT * FROM creditInformationTable where 1=1--'
$username
, конечно, будет ' or 1=1; SELECT * FROM creditInformationTable where 1=1--
Однако, это также смущает меня.Если бы я не поместил эти данные в симпатичную таблицу или что-то для них, разве эти данные никогда не покинут бэкэнд, даже если запрос был уязвим?Как они могли получить эту информацию, если я не передам ее непреднамеренно?
Что приводит меня к большему вопросу: в чем опасность внедрения SQL-кода?Это чисто теоретически, или есть реальные случаи, когда злоумышленник может сделать что-то вроде входа в систему или получить доступ ко всем таблицам в вашей БД с помощью чисто SQL-инъекции?
Редактировать: Поцарапать все это.Позвольте мне немного сузиться.
Как это покинуть сервер?Даже если что-то спросит не то, как мой злоумышленник получит это?API БД, такие как PDO и SQLI, возвращают информацию в PHP, NOT полученную страницу.Разве не должен хорошо написанный PHP-скрипт улавливать наличие неправильных данных или, по крайней мере, не выводить все это пользователю?