SQL-инъекция (SQLi)

Mar 12 2023
Привет. Спасибо, что нашли время, чтобы прочитать запись — вверх! Я ценю это! Сегодняшний контент будет посвящен пониманию «SQL Injection». Контент полностью основан на моем личном опыте и знаниях, взаимодействии с замечательными людьми в области безопасности приложений и разработки программного обеспечения, а также на большом количестве чтения и безопасного кодирования. В этой статье я постараюсь упростить содержание в основах.
Давайте учиться вместе | SQL-инъекция

Привет,

Спасибо, что нашли время, чтобы прочитать запись — вверх! Я ценю это!

Сегодняшнее содержание будет посвящено пониманию «SQL Injection».

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

В этой статье я постараюсь упростить содержание в основах. Я уверен, что у читателей будут свои мысли и комментарии, и я приветствую любые отзывы и обсуждения.

Взгляды/комментарии/мнения принадлежат мне, а не моему прошлому/текущему работодателю.

Давайте учиться вместе!

Что такое SQL-инъекция?

Тип атаки на безопасность приложения, когда злоумышленник вставляет вредоносный код SQL в уязвимое поле ввода, чтобы получить доступ к данным в базе данных и управлять ими. SQLi позволяет злоумышленнику просматривать/изменять/удалять данные в базе данных.

Как исправить SQLi?

Не объединяйте запросы SQL и входные значения.

Всегда выполняйте проверку ввода ( мое личное мнение, это на самом деле сдерживает множество вредоносных сигнатур ), а затем следуйте одной из приведенных ниже стратегий для исправления SQLi:

  1. Параметризованные запросы: передайте входные значения в качестве параметров операторам sql. Это достигается с помощью параметризованных запросов. Это предотвращает выполнение вредоносных входных данных как кода SQL.
  2. Хранимые процедуры. Гораздо лучше не иметь SQL-запросов в коде и перемещать их в БД через хранимые процедуры.

Параметризованные запросы:

В приведенном ниже примере кода имя и проход передаются в качестве параметров оператору sql через 'setString()' . Это метод PreparedStatement.

....
// simple basic example
// assume name and pass are obtained from some input
// conn is the connection
String sqlStatement = "SELECT * FROM userdetails WHERE name = ? AND pass = ?";
PreparedStatement stmt = conn.prepareStatement(sqlStatement);
stmt.setString(1, name);
stmt.setString(2, pass);
ResultSet rs = stmt.executeQuery();
// carry on with your logic
....

В приведенном ниже примере кода «имя» и «местоположение» передаются в качестве параметров хранимой процедуре «userDetails» через «setString()». Это метод CallableStatement. Выходные данные принимаются через параметр «выход», который использует «registerOutParameter». Это еще один метод CallableStatement.

....
// simple basic example
// Assume name and location are obtained from some input
// conn is the connection
CallableStatement stmt = conn.prepareCall("{ call userdetails(?,?,?) }");
stmt.setString(1, name);
stmt.setString(2, location);
stmt.registerOutParameter(3, java.sql.Types.INTEGER);
stmt.execute();
int output = stmt.getInt(3);
// carry on with your logic...
....

Комментарии / отзывы всегда приветствуются, так как я всегда стремлюсь улучшить контент и стать лучше в нем.

Источник: Мой собственный опыт в области безопасности приложений, перефразирование контента с нескольких онлайн-сайтов, инструментов Open AI, DALL-E, Developer и NLP.

Спасибо!

Добавьте меня в LinkedIn