Можете объяснить, что подразумевается под понятием SQL-инъекция и в чем заключается опасность такого вида уязвимости?
Answer from AI
sobes.tech AI
SQL-инъекция — это тип уязвимости, при которой злоумышленник может внедрить вредоносный SQL-код в запрос к базе данных через пользовательский ввод. Это происходит, когда приложение формирует SQL-запросы, напрямую вставляя в них данные от пользователя без должной проверки и экранирования.
Опасность SQL-инъекции заключается в том, что злоумышленник может:
- Получить несанкционированный доступ к данным (например, прочитать, изменить или удалить информацию).
- Обойти механизмы аутентификации.
- Выполнить административные операции на базе данных.
- В некоторых случаях — получить доступ к серверу или выполнить произвольный код.
Пример уязвимого кода на Python с использованием библиотеки sqlite3:
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
user_input = "' OR '1'='1"
query = f"SELECT * FROM users WHERE username = '{user_input}'"
cursor.execute(query)
results = cursor.fetchall()
В этом примере, если user_input содержит вредоносный код, запрос вернёт все записи, обходя проверку имени пользователя.
Чтобы избежать SQL-инъекций, нужно использовать параметризованные запросы или ORM, которые автоматически экранируют данные:
cursor.execute("SELECT * FROM users WHERE username = ?", (user_input,))
Таким образом, SQL-инъекция — это серьёзная угроза безопасности, которую нужно предотвращать правильной обработкой пользовательского ввода.