Pergunta

Estou construindo um aplicativo Java Web usando Java EE 6 e JSF-2.0, usando a API de persistência para todas as operações de banco de dados.

O back-end é MySQL, mas usei as funções EntityManager e consultas nomeadas em EJB-QL para todas as operações.Os ataques de injeção de SQL são possíveis neste caso?

Foi útil?

Solução

Isso só é possível se você estiver incorporando variáveis ​​controladas pelo usuário em uma string SQL/JPQL da seguinte forma:

String sql = "SELECT u FROM User u WHERE id=" + id;

Se você não estiver fazendo isso e estiver usando apenas consultas parametrizadas/nomeadas, estará seguro.

Outras dicas

Sim, é possível.Depende da maneira como você implementa.
Dê uma olhada em Prevenindo injeção na linguagem de consulta JPA.

Se o seu provedor JPA processar todos os argumentos de entrada para lidar com ataques de injeção, você deverá estar protegido.Fazemos thin no EclipseLink.

Como o postador anterior mencionou, reunir seu próprio JPQL ou SQL (para consultas nativas) pode expor você.

Eu recomendaria usar consultas nomeadas com parâmetros em vez de concatenar strings para construir JPQL/SQL.

Douglas

Caso você esteja perguntando de uma perspectiva prática/ofensiva, se uma instrução JPQL for construída a partir da entrada do usuário, considere a seguinte entrada do usuário:

blah') AND FUNCTION('user like chr(65)||chr(37) AND 42 - ', 1) > 40 AND ('42'='42

Se a vítima estiver usando uma implementação JPA >= 2.1 e o banco de dados backend for Oracle, algo como o acima pode atuar como uma injeção SQL booleana para informar se o usuário do banco de dados começa com 'A'.

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