04.11.2023 17:01
💉 SQL-инъекция: что такое и с чем едят?

SQL-инъекция - это атака, которая может привести к компрометации конфиденциальных данных и даже полному захвату системы.

Разрабам и сисадминам важно знать об этой угрозе и принимать меры по ее предотвращению. Использование подготовленных инструкций с параметризованными запросами, проверка и очистка входных данных, а также регулярные проверки безопасности могут значительно снизить риск успешной атаки.

— Вот пример кода, уязвимого для SQL-инъекций:

Код:
<?php
$username = $_POST[“username”];
$password = $_POST[“password”];

$query = “SELECT * FROM users WHERE username = ‘$username’ AND password = ‘$password'”;
$result = mysqli_query($connection, $query);

if (mysqli_num_rows($result) > 0) {
// login successful
} else {
// login failed
}
?>
В этом примере PHP-скрипт пытается аутентифицировать пользователя, сверяя имя пользователя и пароль с записями в таблице «‎users»‎.

❗️ Проблема с этим кодом заключается в том, что он напрямую включает пользовательский ввод ($username и $password) в SQL-запрос без его надлежащей проверки или очистки. Это означает, что в случае инъекции в поля имени пользователя и пароля, он может привести к выполнению непреднамеренных команд.

👁 Например, можно ввести в поле username: admin' --, что привело бы к тому, что запрос стал бы:

Код:
SELECT * FROM users WHERE username = ‘admin’ –‘ AND password = ‘whatever_password_entered’
Этот запрос закомментировал бы остальную часть запроса, минуя проверку пароля, следовательно, атака прошла бы успешно.

— Чтобы устранить эту уязвимость, вводимые пользователем данные должны быть проверены и обработаны, а для построения SQL-запроса следует использовать инструкции с параметризованными запросами, выглядеть это будет примерно так:

Код:
$stmt = $connection->prepare(“SELECT * FROM users WHERE username = ? AND password = ?”);
$stmt->bind_param(“ss”, $username, $password);
$stmt->execute();
Таким образом, он не будет выполнен как запрос и будет обрабатываться как строка, предотвращая атаки с использованием SQL-инъекций.
11.11.2023 17:14
Это означает, что злоумышленник может использовать SQL-инъекцию для внедрения вредоносного кода в запрос и получения несанкционированного доступа к базе данных или выполнения других опасных операций.

В данном случае, если злоумышленник введет в поле ввода специальные символы или команды SQL, то запрос может быть изменен или дополнен таким образом, что пользователь будет аутентифицирован независимо от правильности введенного пароля, что открывает доступ к конфиденциальным данным.

Чтобы предотвратить SQL-инъекции, вместо прямого включения пользовательского ввода в запрос, он должен быть проверен и очищен. Например, можно использовать подготовленные инструкции с параметризованными запросами, где значения пользовательского ввода будут передаваться как параметры, а не включаться в сам запрос. Кроме того, важно периодически проверять безопасность системы и обновлять ее для предотвращения новых уязвимостей.

Итак, SQL-инъекция - это угроза безопасности, в которой злоумышленник может внедрить вредоносный SQL-код в запрос и получить несанкционированный доступ к базе данных. Для предотвращения SQL-инъекций необходимо проверять и очищать пользовательский ввод, использовать подготовленные инструкции и проводить регулярные проверки безопасности системы.
Часовой пояс GMT +3, время: 10:14.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.