SQL-инъекция (SQLi)
Привет,
Спасибо, что нашли время, чтобы прочитать запись — вверх! Я ценю это!
Сегодняшнее содержание будет посвящено пониманию «SQL Injection».
Контент полностью основан на моем личном опыте и знаниях, взаимодействии с замечательными людьми в области безопасности приложений и разработки программного обеспечения, а также на большом количестве чтения и безопасного кодирования.
В этой статье я постараюсь упростить содержание в основах. Я уверен, что у читателей будут свои мысли и комментарии, и я приветствую любые отзывы и обсуждения.
Взгляды/комментарии/мнения принадлежат мне, а не моему прошлому/текущему работодателю.
Давайте учиться вместе!
Что такое SQL-инъекция?
Тип атаки на безопасность приложения, когда злоумышленник вставляет вредоносный код SQL в уязвимое поле ввода, чтобы получить доступ к данным в базе данных и управлять ими. SQLi позволяет злоумышленнику просматривать/изменять/удалять данные в базе данных.
Как исправить SQLi?
Не объединяйте запросы SQL и входные значения.
Всегда выполняйте проверку ввода ( мое личное мнение, это на самом деле сдерживает множество вредоносных сигнатур ), а затем следуйте одной из приведенных ниже стратегий для исправления SQLi:
- Параметризованные запросы: передайте входные значения в качестве параметров операторам sql. Это достигается с помощью параметризованных запросов. Это предотвращает выполнение вредоносных входных данных как кода SQL.
- Хранимые процедуры. Гораздо лучше не иметь 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

![В любом случае, что такое связанный список? [Часть 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































