Você usa Statement ou PreparedStatement?

Um belo dia fui fazer um teste em uma empresa na qual utilizavão o java com linhuagen de desenvolvimento

depois do teste recebi um e-mail e persebi que ainda falta-me muito para chegar a em considerar programador java ma uma dos quesito me chamou muito a atenção

- Quando for implementar algo utilizando JDBC puro, estude antes a respeito de SQL INJECTION. O JDBC tem tratamento específico para isto. nota do avaliador

a minha conclusão foi essa

Statement

não e seguro e vunerabel a pratica chamada SQL injection.

Vejam um exemplo:


String sql   = "select * from user where username='"
+ username +"' and password ='" + password + "'";
stmt   = conn.createStatement();
rs     = stmt.executeQuery(sql);
 if (rs.next())
   {
   loggedIn = true ;
  out.println(" Usuário Logado com  sucesso.");
 } else {
    out.println("Usuário Senha não encontrado.");

 }

A principio nada de errado ai, mas se alguém colocar no campo
usuário isso admin’ OR ‘1′=’1 o comando select final ficaria algo
assim:


select * from user where username=’admin’ OR ‘1′=’1′ and password=”

O resultado desse comando retorna o usuário admin, ou o primeiro
usuário cadastrado no banco que e geralmente o que tem SID root,
imaginem o estrago que isso pode acarretar.
Outro exemplo:

String sql = "select * from user where estado='RS'
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
if (rs.next()) {
    	out.println("Usuário:" + rs.getString(1));
}

Bem simples esse select né, mas se o usuário ao invés de
digitar ‘RS’, digitar ‘or true. Seria a mesma coisa que se o
select fosse ‘Select * from user’ Traz tudo!!! Agora pra
resolver esse tipo de coisa você pode usar
PreparedStatement ao invés de Statement.
Exemplo:


String select = "SELECT * FROM User WHERE username = ? ";
PreparedStatement 
prepStmt = con.prepareStatement(selectStatement);
prepStmt.setString(1, username);
ResultSet rs = prepStmt.executeQuery();

O SQL Injection não tem vez contra o PreparedStatement, que
além de deixa a aplicação mais “segura”,  também melhora a
performance da mesma.

eu so sei isso mais eu me divirto :)

  1. Nenhum trackbacks ainda.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Sair / Alterar )

Imagem do Twitter

You are commenting using your Twitter account. Sair / Alterar )

Foto do Facebook

You are commenting using your Facebook account. Sair / Alterar )

Connecting to %s

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.