Что такое Внедрение SQL? [дубликат]

91
задан Bhargav Rao 19 August 2019 в 01:15
поделиться

5 ответов

Я нашел, что данная статья была чрезвычайно хорошим чтением о методах Внедрения SQL (ссылка к PDF): Усовершенствованное Внедрение SQL В Приложениях .

SQL Server

Несмотря на "Усовершенствованное" высказывание заголовка, это довольно читаемо, даже если у Вас нет большого знания о Внедрении SQL.

4
ответ дан Chad Birch 24 November 2019 в 06:49
поделиться

Получить некоторую общую проверку данных статья Wikipedia о Внедрении SQL .

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

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

1
ответ дан acrosman 24 November 2019 в 06:49
поделиться

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

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

Без надлежащего выхода, некоторый код SQL, 'введенный' пользователем, мог быть выполнен механизмом SQL как код SQL, а не простая строка или значение.

0
ответ дан thomasrutter 24 November 2019 в 06:49
поделиться

Кто-то может объяснить инжекцию SQL?

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

Это не должно быть злонамеренно, это может быть несчастный случай. Но случайное Внедрение SQL, более вероятно, приведет к ошибке, чем в уязвимости.

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

Как это вызывает уязвимости?

Это может привести к уязвимостям, потому что взломщики могут отправить значения в приложение, которое они знают, будет интерполирован в строку SQL. Будучи очень умными, они могут управлять результатом запросов, считывая данные или даже изменяя данные, которые им нельзя позволить сделать.

Пример в PHP:

$password = $_POST['password'];
$id = $_POST['id'];
$sql = "UPDATE Accounts SET PASSWORD = '$password' WHERE account_id = $id";

Теперь предположите, что взломщик устанавливает параметры запроса POST на"password=xyzzy"и"id=account_id"приводя к следующему SQL:

UPDATE Accounts SET PASSWORD = 'xyzzy' WHERE account_id = account_id

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

Где точно точка, где SQL введен?

Это не SQL, это введено, это довольно, что это интерполировало ("введенный") в строку SQL, приводящую к другому виду запроса, чем я предназначил. Я доверял динамическому контенту, не проверяя его и выполнил получающийся SQL-запрос вслепую. Это - то, где проблема запускается.

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

Большинства случаев Внедрения SQL можно избежать при помощи параметров запроса. Посмотрите, Как я могу предотвратить Внедрение SQL в PHP? для примеров.

83
ответ дан Bill Karwin 24 November 2019 в 06:49
поделиться

Внедрение SQL происходит, когда пользователь приложения может влиять на значение запроса базы данных. Это часто происходит, когда строки arbitary от ввода данных пользователем связываются для создания SQL, который питается к базе данных. Например, позволяет, говорят, что у нас был следующий код (в PHP, но то же сохраняется для любого языка), который мог бы использоваться для обработки пользовательского входа в систему.

$sql = "SELECT  FROM users WHERE username='".$_GET['username']."' AND password='".$_GET['password']."'";

Вред причинен, когда пользователь вводит что-то как

administrator'; --

... для имени пользователя. Без надлежащего кодирования запроса становится:

SELECT * FROM users WHERE username='administrator'; -- AND password=''

Проблема здесь - то, что 'в имени пользователя закрывает поле имени пользователя затем - запускает комментарий SQL, заставляющий сервер базы данных проигнорировать остальную часть строки. Конечным результатом является пользователь, может теперь войти в систему как администратор, не имея необходимость знать пароль. SQL Inection может также использоваться, чтобы выполнить ОБНОВЛЕНИЕ, УДАЛИТЬ или ОТБРОСИТЬ запросы и действительно повредить базу данных.

Внедрение SQL может быть предотвращено при помощи параметризированных запросов или применения Ваших функций выхода языка/инструментария (таких как mysql_real_escape_string () в PHP).

После того как Вы понимаете Внедрение SQL, Вы получите шутку позади этого мультфильма.

27
ответ дан Jim OHalloran 24 November 2019 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: