Если оператор sql сохраняется в таблице, должен ли он рассматриваться как sql-инъекция?

avatar
Abdus Sattar Bhuiyan
8 апреля 2018 в 09:45
46
1
0

Насколько я знаю, определение SQL инъекции:

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

Если оператор SQL может быть сохранен путем отправки формы, следует ли рассматривать его как внедрение SQL до тех пор, пока нельзя будет манипулировать какими-либо данными?

Допустим, у меня есть контактная форма с текстовой областью ввода. А кто-то поставил значение:

SELECT * FROM users

и мое приложение позволяет сохранять такие данные. Рассматривается ли это как внедрение SQL?

Источник
PSK
8 апреля 2018 в 09:56
0

А если кто-то поставит DROP TABLE пользователей?

Abdus Sattar Bhuiyan
8 апреля 2018 в 10:04
0

В чем проблема с этим. Позвольте мне попробовать здесь: DROP DATABSE. Вы можете увидеть заявление об опасном падении в моем комментарии. Если вы видите, это доказывает, что он был сохранен на сервере, где работает coderhelper. Но что случилось с этим комментарием? Мой оператор sql отображается как обычный текст.

PSK
8 апреля 2018 в 10:06
1

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

Ответы (1)

avatar
Zohar Peled
8 апреля 2018 в 10:03
2

Я не знаю, откуда вы взяли это определение SQL Injection, но оно верно лишь частично.

Определение из Википедии намного точнее:

Внедрение SQL — это метод внедрения кода, используемый для атаки на приложения, управляемые данными, при котором злонамеренные операторы SQL вставляются в поле ввода для выполнения (...)

Важнейшая часть понимания SQL-инъекций — это то, как они на самом деле работают. Пользователь под ником Your Common Sense написал хорошее и простое объяснение этого прямо здесь.

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

Сохранение полных операторов SQL внутри вашей базы данных может быть открытой дверью для того, что называется "инъекцией SQL второго порядка" (Википедия, та же страница:)

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

Итак, прямой ответ на ваш вопрос: это зависит от обстоятельств. Это может быть реальной угрозой SQL Injection.

Видите ли, чтобы успешно выполнить SQL-инъекцию второго порядка, недостаточно просто хранить операторы SQL в базе данных — ваше приложение также должно их выполнять (поскольку злоумышленник не имеет прямого доступа к вашей базе данных. Если он , им больше не нужно возиться с SQL Injection).

Риск SQL-инъекций можно полностью исключить с помощью параметризованных запросов.

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

Abdus Sattar Bhuiyan
8 апреля 2018 в 10:16
0

Благодаря тонну. Прозрачный.

Zohar Peled
8 апреля 2018 в 10:46
0

Рад помочь :-)