В ходе тестирования приложений тестировщик должен убедиться, что выполняются все требования к ПО. В частности – безопасность от возможного применения SQL-инъекций. Что это такое – давайте разбираться.
В ходе тестирования приложений тестировщик должен убедиться, что выполняются все требования к ПО. В частности – безопасность от возможного применения SQL-инъекций. Что это такое – давайте разбираться.
Оглавление
ToggleВсе мы имеем опыт регистрации в Интернет-приложениях. Обычно программное обеспечение следит за тем, чтобы пользователи не могли вводить некорректные данные – например, недопустимые символы. Также в приложении может быть запрещено использовать кириллические буквы вместо латинских.
Но в качественном софте также реализуется и проверка на возможность SQL-инъекций. Дело в том, что злоумышленники могут воспользоваться полями ввода, чтобы внести туда специальную команду на SQL-языке и похитить конфиденциальные данные.
SQL (Structured Query Language, «Язык структурированных запросов») — это язык программирования для создания, модификации и управления запросами к базе данных (БД). Поэтому, если разработанное приложение включает в себя БД и, соответственно, механизм взаимодействия с ней, то с помощью SQL-запросов можно:
SQL работает через направление запросов к БД. Например:
Эти команды применимы, естественно, для тех приложений, у которых система управления базами данных (СУБД) сделана на SQL, например: MySQL, PostgreSQL, MSSQL. Указанные СУБД довольно часто используются в разработке сайтов благодаря своей простоте. Однако, как мы сейчас выясним, эта простота имеет и обратную сторону: небрежность в коде может повлечь утечку или потерю данных в ПО.
В случае SQL-инъекции злоумышленник может через поле ввода данных ввести SQL-запрос, а движок приложения обработать его. При этом SQL-запрос может содержать команду и на выдачу уже имеющихся данных, и на добавление новых, и на их изменение, и даже на удаление.
Получается, что в код как бы «впрыскивают» зловредный компонент, поэтому такой тип уязвимости называют инъекциями. Это уязвимость на стороне сервера.
Допустим, наш сайт запрашивает у пользователя id (идентификатор) товара, затем в таблице GOODS ищет запись с этим id и выдает найденные данные. Если это закодировать, например, в PHP, то будет выглядеть так:
$id = $REQUEST[‘id’];
$q = “select * from GOODS where id={$id}”;
Database::query($q);
Предполагается, что клиент в id запишет натуральное число. Однако, злоумышленник может прислать не число, а специальную последовательность символов, например:
1; drop table GOODS
И тогда первоначальный код превратится в следующее:
select * from GOODS where id=1; drop table GOODS
Дело в том, что SQL-команды могут разделяться точкой с запятой, поэтому СУБД на SQL прочитает это и выполнит как 2 отдельных команды:
select * from GOODS where id=1
drop table GOODS
И если первая из них безобидная, то вторая – удалит всю таблицу GOODS.
Тестировщик может протестировать уязвимость софта перед SQL-инъекциями, пробуя ввести в поле ввода символы-маркеры SQL-языка, например:
Если приложение «съело» такие данные и ничего не ответило – есть вероятность того, что у него нет защиты от SQL-инъекций. Об этом надо сообщить программистам, они сами разберутся, в чем дело.
SQL-инъекции – это злонамеренный запрос к БД приложения. Она может повлечь изменение и/или потерю данных на сервере. Тестировщики проверяют ПО на возможность SQL-инъекций, вводя символы-маркеры этого языка запросов.
Автор Михаил Кулешов
Михаил, профессиональный партнерский маркетолог, является основателем компании South Media OÜ, которая была создана в 2018 году и базируется в Таллинне. С 2016 года Михаил уехал из Финляндии и жил как настоящий «цифровой кочевник» в IT-индустрии, путешествуя по миру только с ноутбуком. Михаил работает и пишет статьи, связанные с IT-индустрией.
© Copyright 2023 Testirovshik.com