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
Nenhum trackbacks ainda.