SQL-инъекция - нет опасности при вызове хранимой процедуры (в iSeries)? - PullRequest
0 голосов
/ 13 июля 2009

Я провел некоторый поиск, но у меня есть конкретный вопрос по SQL-инъекциям, и я надеюсь, что смогу получить некоторую информацию, так как считаю, что, возможно, получаю неправильный конец флешки для очистки данных на местах и ​​т. Д .: -

У меня есть Java-программа, вызывающая хранимую процедуру в iSeries. Хранимая процедура имеет код CL / RPG за кулисами. Хранимая процедура вызывается посредством параметров с данными, поступающими с веб-страницы. Например, вызов будет выглядеть следующим образом: -

call library.prog('field1Value', 'field2Value')

Нужно ли беспокоиться о каких-либо символах, введенных через веб-сайт в 'field1Value' и т. Д., Или, поскольку это вызов хранимой процедуры, не существует ли опасность внедрения SQL-кода? Зависит ли это от того, использует ли программа RPG за кулисами 'field1Value' в своем собственном операторе SQL как часть этой обработки?

Длина полей, передаваемых в процедуру, имеет фиксированную длину, поэтому мы не можем, например, преобразовать «хитрые» символы в их HTML-эквивалент.

Ценю любые (я предполагаю, что это может быть глупый вопрос!) Отзыв (не обязательно специфичный для iSeries) по этому вопросу.

Ответы [ 3 ]

1 голос
/ 13 июля 2009

если вы не используете эти параметры для создания динамического sql в самом proc'е, у вас все будет в порядке

также вы не можете очистить его, проверив параметры

см. Здесь: SQL-тизер .. попробуйте защитить это

ниже синтаксис сервера sql

Я могу назвать такой процесс, как этот

prDropDeadFred ' declare @d varchar(100) select @d = reverse(''elbaTdaB,elbatecin elbat pord'') exec (@d)'

или как это

prDropDeadFred ' declare @d varchar(100) select @d = convert(varchar(100),0x64726F70207461626C65204E6963655461626C652C4261645461626C65) exec (@d)'

или 5000 других способов, о которых вы не узнаете

1 голос
/ 07 марта 2012

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

0 голосов
/ 13 июля 2009

Если вы используете JDBC CallableStatement, то вы в безопасности. CallableStatement является лишь подтипом PreparedStatement, и атаки с использованием SQL-инъекций не должны быть возможными. Единственный способ, которым я могу думать, чтобы это не было правдой, было бы, если бы ваша хранимая процедура выполняла динамический SQL.

...