
Gabriel Brooks
0
3204
746
Мир интернет-безопасности изобилует открытыми портами, бэкдорами, дырами в безопасности, троянскими программами, червями, уязвимостями брандмауэра и множеством других проблем, которые заставляют нас всех быть на ногах каждый день. Для частных пользователей вирусы и черви кажутся худшими из возможных возможностей. Но для тех, кто работает с базой данных, SQL-инъекция является одним из самых разрушительных недостатков безопасности..
Базы данных чрезвычайно ценны в сфере компьютеров. Они необходимы для хранения данных в виде памяти и отображения различных взаимосвязей между точками данных. Здесь, в MakeUseOf, у нас есть множество баз данных, посвященных различным задачам: одна для всех наших статей, одна для нашей базы пользователей, одна для нашей программы вознаграждений, и этот список можно продолжить. Что происходит, когда наши базы данных подвергаются злонамеренной атаке или даже уничтожению?
Когда у вас нет реального доступа к базе данных, SQL-инъекция является одной из наиболее заметных форм атаки. Продолжайте читать, чтобы узнать, что это такое и как это может быть настолько опасно.
Что такое SQL??
Чтобы понять SQL-инъекцию, вы должны сначала понять, что такое SQL и как он связан с веб-сайтом. SQL, что означает язык структурированных запросов, является типом языка программирования, оптимизированным для управления табличными данными. Для всех намерений и целей, это просто способ для программистов общаться с базой данных и давать ей команды.
Всякий раз, когда с базой данных обращаются, существуют команды SQL, которые передаются и обрабатываются. Если вы подумаете обо всех случаях, когда с базой данных обращаются, вы придете к выводу, что это происходит только при нескольких обстоятельствах:
- Когда новые данные должны быть вставлены,
- Когда текущие данные должны быть изменены,
- Когда старые данные должны быть удалены,
- Когда нужно искать и извлекать определенный фрагмент данных.
Каждый раз, когда необходимо выполнить одно из этих действий, команда SQL выполняется где-то на сервере. По большей части программист должен определить, когда и где эти команды SQL встречаются в исходном коде. Однако есть неизбежные обстоятельства, когда пользователь может принудительно манипулировать базой данных - и эти возможности повсюду вокруг вас..
Вы когда-нибудь заходили на сайт? Вы когда-нибудь размещали комментарий к статье в блоге или ответ в ветке форума? Вы когда-нибудь отправляли сообщение в Facebook другу? Напечатали письмо в Gmail? Ищете сайт в Google? Каждый раз, когда вы видите поле ввода на веб-сайте (имя пользователя, пароль, поисковый запрос, окно сообщения и т. Д.), Этот текст отправляется в базу данных и обрабатывается.
Теперь, если злонамеренный пользователь хотел вмешаться в базу данных, у него не так много вариантов. Одна возможность будет получить фактическую физическое доступ к серверу и уничтожить его на его базе. Но в противном случае для злоумышленника наиболее разумно перехватить существующую команду SQL при использовании поля ввода, что заставит сервер выполнить команду, отличную от той, которая была изначально задумана..
Техника SQL-инъекций
Этот акт хищения существующей команды SQL - это то, к чему относится внедрение SQL. Почему это называется инъекцией? Потому что перехват SQL-команды требует, чтобы пользователь вводил свой собственный SQL-код при использовании поля ввода. Это звучит странно? Позвольте мне проиллюстрировать на примере.
Рассмотрим страницу входа в MakeUseOf. Когда вы вводите свое имя пользователя и пароль и нажимаете “Отправить“, вы заставляете веб-сервер генерировать команду SQL, которая включает только что предоставленную вами информацию, то есть ваше имя пользователя и пароль. База данных получает информацию, проверяет правильность комбинации имени пользователя и пароля, а затем предоставляет вам надлежащий доступ к другим областям сайта..
Теперь представьте, что произойдет, если злонамеренный пользователь не введет свое имя пользователя и пароль, а вместо этого введет команду SQL в качестве своего имени пользователя? Если код сервера не защищен должным образом, база данных получит неверное имя пользователя (которое на самом деле является командой SQL) и фактически запустит его как команду.
И именно поэтому это называется инъекцией. Команда SQL вводится в базу данных законными средствами, манипулируя ею так, что в итоге она делает то, чего не должна была делать.
Расширенный пример
До сих пор я описывал внедрение SQL в терминах высокого уровня, чтобы каждый мог понять, даже те, кто не обладает знаниями в области программирования. В этом разделе я собираюсь привести реальный пример как эта техника возможна. Если вы новичок в SQL или никогда раньше не занимались программированием, то можете спокойно пропустить этот раздел..
При входе на веб-сайт вот один из возможных способов написания кода на SQL:
ВЫБЕРИТЕ user_id
FROM users_db
ГДЕ username = "$ username" И пароль = "$ password"
По сути, команда просит базу данных вернуть все user_ids из таблицы users_db которые соответствуют введенной комбинации имени пользователя и пароля. Выглядит все хорошо и денди, верно?
Предположим, что для входа в систему были введены следующие данные:
Имя пользователя: Дэвид
Пароль: fubar 'OR' x '=' x
Обратите внимание, что поле пароля не начинается и не заканчивается апострофом. Когда сервер получит эту попытку входа в систему, он возьмет все данные в поле пароля и поместит их вместо $ password в коде. Результирующая команда SQL будет выглядеть так:
ВЫБЕРИТЕ user_id
FROM users_db
ГДЕ username = "Дэвид" И пароль = 'fubar 'OR' x '=' x'
Когда сервер запускает эту команду, последняя часть этой команды SQL будет всегда верните истину. Это означает, что злоумышленник может ввести любое имя пользователя и мгновенно получить доступ к этой учетной записи, поскольку логин будет работать независимо от того, правильно ли он получил пароль.
Конечно, вход в чужую учетную запись является довольно легким нарушением, если сравнивать его со всеми другими возможными попытками взлома: удалением целых баз данных, уничтожением всех данных или даже кража данные в базах данных.
Профессиональные веб-разработчики все лучше и лучше предотвращают подобные уловки, но время от времени вы будете слышать, что компания понесла убытки от атаки SQL-инъекций. Когда это происходит, теперь вы знаете, что это значит и как это возможно.
Изображение предоставлено: Intro Image Via Shutterstock, Схема базы данных Via Shutterstock, взломана через Shutterstock