[RESOLVIDO] Problemas com SQL Injection

12 respostas
C

Bom Dia!

Amigos, é o seguinte: Estou com o famoso problema de “Joana D’arc”

Eu preciso pesquisar por um nome. No que for digitando o sistema vai me retornando o que tem.

Observe o código que vcs vão entender melhor.

public ResultSet pesquisa (String nome){
ResultSet rs = null;

try{

String SQL = "SELECT * FROM usuario WHERE usu_nome LIKE % ? %;

PreparedStatement ps = (PreparedStatement) conn.preparedStatement(SQL);

ps.setString(1, nome);

rs = ps.executeQuery();

ps.close();

}catch(Exception e){

}
return rs;
}

Está dando erro de SQL.

Já tentei colocar (… LIKE ‘% ? %’…) tbm não funciona!!

OBS: Sem % funciona normal…

Me ajudem por favor!

12 Respostas

R

Qual o erro, manão?

Já tentou fazer pelo outro lado? String SQL = "SELECT * FROM usuario WHERE usu_nome LIKE ?"; PreparedStatement ps = (PreparedStatement) conn.preparedStatement(SQL); ps.setString(1, "%"+nome+"%"); rs = ps.executeQuery(); ps.close();

L

Vê se ajuda:

public ResultSet pesquisa (String nome){  
    ResultSet rs = null;  
      
    try{  
      
    String SQL = "SELECT * FROM usuario WHERE usu_nome LIKE ?;  
      
    PreparedStatement ps = (PreparedStatement) conn.preparedStatement(SQL);  
      
    ps.setString(1, "%" + nome + "%");  
      
    rs = ps.executeQuery();  
      
    ps.close();  
      
    }catch(Exception e){  
      
    }  
    return rs;  
    }
G

Fala Calinhos meu brother !

So seguir o que o amigo ai decima falou que vai dar certinho !

Passei por isso tbm … veja meu codigo !

pstm.setString(1, buscarCarona.getCidadePartida()+"%");

ou entao

pstm.setString(1, "%"+ buscarCarona.getCidadePartida()+"%");

Abraço

C

É isso ai amigos, deu certo sim!

Obrigado!!

R

Só pra constar, até onde eu sei isso aí não é SQL Injection

C

Então, para evitar o SQL Injection utiliza-se o PreparedStatement.

Na verdade o problema era utilizar % com PreparedStatement.

R

carlinhoscomp:
Então, para evitar o SQL Injection utiliza-se o PreparedStatement.

Na verdade o problema era utilizar % com PreparedStatement.


Exatamente o que eu quis dizer hehehe, o título do tópico não fez sentido pra mim, visto que você já estava usando o PreparedStatement :slight_smile:

mas tudo bem, que bom que seu problema foi resolvido :smiley:

G

Bom eu acho que isso é uma maneira para prevenir SQL Injection sim .

Pois pode usar o prepareStatement e mesmo assim usar variaveis no meuio do codigo SQL, tipo

String sql = "SELECT nome, email, sexo, cel FROM usuario WHERE id = "+ varId+" ;
   ResultSet rs = pstm.executeQuery();
H

galoneti:
Bom eu acho que isso é uma maneira para prevenir SQL Injection sim .

Pois pode usar o prepareStatement e mesmo assim usar variaveis no meuio do codigo SQL, tipo

String sql = "SELECT nome, email, sexo, cel FROM usuario WHERE id = "+ varId+" ;
   ResultSet rs = pstm.executeQuery();

Calma, “muita hora nessa calma”…
O código que você citou ajuda a prevenir o SQL Injection?
Se sim, não me entenda errado… Mas você sabe o que é o SQL Injection? Como ele funciona?

G

Hehehe,

O codigo que citei, é vuneravel a SQL Injection,
o que eu quiz dizer é que, só o prepareStatement não previne o SQL Injection. ( Eu acho ) :slight_smile:

hehehe

R

Só por ter dado um new em um PreparedStatement realmente você não vai prevenir o SQL Injection, isso como muitas outras coisas vai depender da implementação.

Agora se usar o PreparedStatement como ele deve ser usado, aí sim previne.

G

Só por ter dado um new em um PreparedStatement realmente você não vai prevenir o SQL Injection, isso como muitas outras coisas vai depender da implementação.

Agora se usar o PreparedStatement como ele deve ser usado, aí sim previne.

Fecho, concordo !

Criado 17 de setembro de 2012
Ultima resposta 17 de set. de 2012
Respostas 12
Participantes 5