2012-01-23 2 views
0

Я видел некоторый аналогичный вопрос, ничего о mysql ...
Есть ли способ сделать sql-инъекцию в SP? Как защитить от этого на уровне SP?
Другими словами, может ли Query strucutre, внутри SP, каким-либо образом модифицироваться входящим параметром?
Если я посылаю к хранимой процедуре параметр «1; DELETE от пользователей; -» и запрос:Можно ли выполнить SQL-инъекцию с помощью хранимых процедур?

select * 
from T 
where = @p 
+0

Какая у вас среда программирования? Это избыточно для защиты от SQL-инъекции, если вы беспокоитесь о том, что это происходит напрямую. –

+0

@Brian Graham - Я использую PHP, вы имеете в виду, что лучший подход - это дезинформировать это через PDO? –

+0

, предполагая, что пользовательский интерфейс представляет собой веб-интерфейс, который вы бы делали с кодировкой html или кодировкой javascript в полях ввода. Если это приложение для настольных компьютеров, вы можете сделать что-то подобное, как я себе представлял. Если вы беспокоитесь по поводу инъекций sql из самой хранимой процедуры, то это совсем другая проблема. Возможно, напишите какое-то пользовательское регулярное выражение и запустите переменные, прежде чем передавать их в команды sql. – Brian

ответ

5

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

До тех пор, пока вы создаете свои запросы в виде текста, SQL-инъекция возможна независимо от текста запроса. И если вы этого не сделаете, или если вы правильно дезинфицируете свой ввод, то опять же SQL-инъекция не должна быть проблемой, будь то SELECT или что-то еще.

+0

На самом деле это довольно хороший ответ. Если в вашей хранимой процедуре вы создаете запросы с помощью строк 'CONCAT(), исходящих из параметров (или других внешних источников), тогда этот SP уязвим для инъекций. В противном случае вы в безопасности. – Mchl