SQL-инъекция - нет опасности при вызове хранимой процедуры (в iSeries)?
Я провел некоторый поиск, но у меня есть конкретный вопрос по SQL-инъекциям, и я надеюсь, что смогу получить некоторую информацию, так как считаю, что, возможно, получаю неправильный конец флешки для очистки данных на местах и т. Д.:
У меня есть Java-программа, вызывающая хранимую процедуру на iSeries. Хранимая процедура имеет код CL / RPG за кулисами. Хранимая процедура вызывается посредством параметров с данными, поступающими с веб-страницы. Например, вызов будет выглядеть следующим образом:
call library.prog('field1Value', 'field2Value')
Нужно ли беспокоиться о каких-либо символах, введенных через веб-сайт в 'field1Value' и т. Д., Или, поскольку это вызов хранимой процедуры, не существует ли опасность внедрения SQL-кода? Зависит ли это от того, использует ли программа RPG за кулисами 'field1Value' в своем собственном операторе SQL как часть этой обработки?
Длина полей, передаваемых в процедуру, имеет фиксированную длину, поэтому мы не можем, например, преобразовать "изворотливые" символы в их HTML-эквивалент.
Цените любые (я ожидаю, что это может быть глупый вопрос!) Отзыв (не обязательно специфичный для iSeries) по этому вопросу.
3 ответа
Если вы не используете эти параметры для создания динамического 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 других способов, о которых вы не узнаете
Вы НЕ МОЖЕТЕ быть в безопасности, если вызываемая программа использует входные параметры для построения динамического SQL, передает информацию другой программе, которая это делает, или сохраняет ее в поле таблицы базы данных, которое впоследствии используется для динамического SQL в какой-либо другой программе.
Если вы используете JDBC CallableStatement, то вы в безопасности. CallableStatement является лишь подтипом PreparedStatement, и атаки с использованием SQL-инъекций не должны быть возможными. Единственный способ, которым я могу думать, чтобы это не было правдой, было бы, если бы ваша хранимая процедура выполняла динамический SQL.