Problema com SQL no Login[Resolvido]

5 respostas
Schoker

Bom dia,

Eu estava testando aqui fazer o login colocando uma sql…Ex:

Tem os campos de usuario e senha.

Eu inseri no campo usuario o seguinte texto:

’ OR 1=1 #

Isso significa que quando eu for fazer a validação do login ele vai entrar…veja a sql:

SELECT * FROM usuario WHERE login = ‘’ OR 1 = 1 #AND senha = ‘’;

A parte q tem o texto #AND senha = ‘’; fica comentado porcausa do jogo da velha…

E assim o usuario acessa tranquilamente o meu sistema! shuahsuahsuahsau

Que eu saiba o hibernate considera o texto do campo como sendo texto mesmo e nao sql…mas eu nao estou usando hibernate pq minha aplicação nao eh grande…

Tem um metodo que nao deixa isso acontecer?

Desde já agradeço!

5 Respostas

dxos

uma forma simples é você não utilizar o AND senha = 'blabla' no seu sql.

por exemplo:

SELECT * FROM tb_usuario WHERE login = "blablabla"
// se o cara tentar realizar um sql injection

SELECT * FROM tb_usuario WHERE login = "" OR 1=1

//só que a validação da senha seria feito via codigo mesmo ex.
if(senha = this.senha)
//realiza login
else
//retorna a pagina de login
E

Se você usar o Hibernate DIREITO, ele evita o SQL Injection.

Veja um exemplo aqui:

http://www.owasp.org/index.php/Hibernate-Guidelines#Don.27t_use_session.find.28.29

Ele dá um exemplo em que pode haver SQL Injection (quando você concatena os parâmetros, simplesmente) e onde não há SQL Injection (onde você usa o operador “?”) para ele pegar os parâmetros como usuário e senha.

E

dxos, não adianta só validar a senha no braço como você mostrou. Você não está vendo o problema completo.

O problema mais grave é quando no SQL Injection o cara aproveita que normalmente você acaba rodando os programas com privilégios maiores que os necessários*, e o cracker manda um comando do tipo que dropa tabelas, ou então atualiza as tabelas com valores indevidos, ou remove linhas, ou mesmo insere uma nova linha com usuário e senha do jeito que ele quer.

  • Nunca vi um programa SQL que usasse apenas os privilégios necessários, exceto naqueles lugares cheios de frescuras onde você nem pode dar um select no banco - precisa de autorização do CIO, ou coisa parecida.
dxos

entanglement:
dxos, não adianta só validar a senha no braço como você mostrou. Você não está vendo o problema completo.

O problema mais grave é quando no SQL Injection o cara aproveita que normalmente você acaba rodando os programas com privilégios maiores que os necessários*, e o cracker manda um comando do tipo que dropa tabelas, ou então atualiza as tabelas com valores indevidos, ou remove linhas, ou mesmo insere uma nova linha com usuário e senha do jeito que ele quer.

  • Nunca vi um programa SQL que usasse apenas os privilégios necessários, exceto naqueles lugares cheios de frescuras onde você nem pode dar um select no banco - precisa de autorização do CIO, ou coisa parecida.

respondi desta Forma pois ele perguntou sobre sql.
Eu no caso utilizaria um PreparedStatement …

mas no caso do exemplo que vc usou de darem DROP na tabela via SQL invection e que os sistemas nunca tem os privilegios de segurança no usuario do banco.
ai vai de cabeça das pessoas, se elas não se concientizarem que utilizar os privilegios é MAIS DO QUE NECESSARIO, se tem este recurso pq não utiliza-ló?
claro que só isto não resolve, mais já é de grande ajuda. :smiley:

aqui na empresa sempre utilizamos, pos perder qualquer dado aqui é “rua” quase certo XD…

apesar que concordo com você em varios pontos…

Schoker

aew
eu usei um PreparedStatement e deu certo…
ele encara como um parametro e nao uma sql…ai rodou aqui!!

Vlw pela ajuda pessoal!

Criado 6 de agosto de 2010
Ultima resposta 6 de ago. de 2010
Respostas 5
Participantes 3