Numeric Sql Injection

5 respostas
G

Como Evitar Numeric Sql Injection ???

Alguém conhece o webgoat ?

Como pegar essa insegura query = "SELECT * FROM weather_data WHERE station = " + station; sem poder deixar o usuário manipular para SELECT * FROM weather_data WHERE

station = 101 OR 1=1 . E torna-la segura ???

5 Respostas

E

Use PreparedStatements.

G

Estou tentando esse código, mas não tá dando certo.

Statement stmt = null;   
		        Connection conn = null;
			query = "SELECT * FROM weather_data WHERE station = " + station + "''";
     		        PreparedStatement pstm = conn.prepareStatement(query);
			pstm.setString(1,station);
			pstm.executeQuery();
pmlm

Gustavo sin:
Estou tentando esse código, mas não tá dando certo.

Statement stmt = null;   
		        Connection conn = null;
			query = "SELECT * FROM weather_data WHERE station = " + station + "''";
     		        PreparedStatement pstm = conn.prepareStatement(query);
			pstm.setString(1,station);
			pstm.executeQuery(); </blockquote>
query = "SELECT * FROM weather_data WHERE station = ?";
drsmachado
query = "SELECT * FROM weather_data WHERE station = " + station + "''";

Cara, você pode terminar a string query no parâmetro station:

query = "SELECT * FROM weather_data WHERE station = " + station;
ViniGodoy

O código, como o pmlm falou, fica assim:

Statement stmt = null; Connection conn = null; query = &quot;SELECT * FROM weather_data WHERE station = ?&quot; PreparedStatement pstm = conn.prepareStatement(query); pstm.setString(1,station); pstm.executeQuery();

Jamais concatene Strings no seu SQL.

Isso deixa a query dependente do formato de texto de data do banco, dá problemas com apóstrofes e outros caracteres especiais e ainda deixa seu código vulnerável a dependency injection. Use PreparedStatement.

Aliás, essa que você pensou nem a pior. Ele poderia fazer:

"1<>1; DELETE * FROM weather_data; Commit;"

E muitos bancos vão aceitar os três comandos (no lugar do delete, que pode ser bloqueado por um join, poderia ser também um update, que alterasse uma coluna importante para um valor só).

Criado 16 de novembro de 2010
Ultima resposta 16 de nov. de 2010
Respostas 5
Participantes 5