Pergunta

Eu fiz alguma pesquisa ao redor, mas eu tenho uma pergunta específica sobre SQL Injection e espero que eu possa obter algumas informações, como eu acredito que pode estar ficando do lado errado da vara para fazer com saneantes dados de campo etc: -

Eu tenho um programa java chamar um procedimento armazenado em um iSeries. O procedimento armazenado tem o código CL / RPG nos bastidores. O procedimento armazenado é chamado por meio de parâmetros com os dados provenientes de uma página web. Por exemplo, a chamada seria parecido com o seguinte: -

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

Do I precisa se preocupar com quaisquer caracteres digitados através do site em 'field1Value' etc ou, porque é uma chamada de procedimento armazenado, se o perigo de injeção de SQL não existe? Será que depende se o programa RPG nos bastidores usos 'field1Value' em sua própria instrução SQL como parte de que o processamento?

Os comprimentos de campo passados ??para o proecdure são de comprimento fixo de modo que não possa, por exemplo, converter 'desertor caracteres no seu equivalente html.

Agradecemos qualquer (estou antecipando isso pode ser uma pergunta estúpida!) Realimentação (não necessariamente iSeries específico) sobre isso.

Foi útil?

Solução

a menos que você estiver usando esses parâmetros para construir SQL dinâmico no próprio proc você deve ser fino

Além disso, você não pode limpá-lo, verificando os parâmetros

veja aqui: SQL teaser..try proteger este

abaixo é sql server sintaxe

Eu posso chamar um proc como este

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

ou como este

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

ou 5000 outras maneiras que você não vai saber sobre

Outras dicas

Você pode não ser seguro, se o programa chamado utiliza os parâmetros de entrada para construir SQL dinâmica, passa as informações para outro programa que faz, ou armazena em um campo da tabela de banco de dados que é usado mais tarde para SQL dinâmica em algum outro programa .

Se você estiver usando o JDBC CallableStatement, então você está seguro. CallableStatement é apenas um subtipo de PreparedStatement e ataques de injeção SQL não deve ser possível. A única maneira que eu posso pensar para isso não ser verdade seria se o procedimento armazenado foi executar SQL dinâmico.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top