Acesso a banco de dados com Hibernate, dúvida relacionada a PreparedStatement

1 resposta
chapolimCPT

Bem, estou acessando um Banco de Dados MySQL utilizando o Framework Hibernate, peguei alguns exemplos como aquele clássico da Caelum que utiliza a API do Hibernate, mas a minha dúvida é a seguinte. Estudando conexão com banco, ví em alguns lugares que PreparedStatement gera uma segurança maior, pois evita o SQL Injection. Gostaria de saber, primeiramente se isto é real, se faz uma grande diferença? Outra dúvida é a seguinte … usando as Annotations do Hibernate, tem como usar o PreparedStatement para gerar uma segurança maior?

Desde já agradeço a atenção de todos. Obrigado.

1 Resposta

alexegidio

Bom dia!
Cara, SQL Injection vai acontecer com prepared statement ou com Hibernate, desde que você não trabalhe da forma correta,
fazendo concatenação de String numa query e dando margem para que um usuário mal intencionado inclua um código no seu
Banco.
Vamos a um exemplo:

String sql = "Select * from USER where login = ' " +  <texto_capturado_de_um_input> + " ' "

Onde o correto seria você fazer um statement parametrizado:

String sql = "select * from user where login = ?";
PreparedStatement prep = conn.prepareStatement(sql);
prep.setString(1, usuario.getLogin)

Isto também é possível com Hibernate

Query select = session.createQuery("from Usuario u where u.login = :loginUser");
select.setParameter("loginUser", usuario.login);

Assim não é trabalhar com JDBC nativo, JPA, ou Hibernate que lhe dará maior segurança e sim a forma de como você codifica.

Espero ter ajudado

Criado 21 de outubro de 2009
Ultima resposta 22 de out. de 2009
Respostas 1
Participantes 2