SQLInjection

11 respostas
R

Esse tópico continua a discussão começada em

http://www.guj.com.br/posts/list/0/96389.java#517938

Eu desenvolvi um componente de segurança, opensource, ha um tempo atrás para bloquear injeções de SQL em aplicações Web.

http://antisqlfilter.sourceforge.net/pt-br/index.html

O Krusst estava comentando sobre alguns pontos importantes na hora de se defender contra esse tipo de ataque.

11 Respostas

K

Ok, valeu pelas dicas.
Mas o AntiSQLFilter vai pegar o select e o exec.
Também, não acho legar manter essa discussão aqui pois estamos fugindo do assunto tópico.
Vou abrir um tópico sobre SQL Injection.

mas eu poderia escrever tudo, o “select”, o “exec”, o “;” assim como escrevi o “shutdown”

e outras, DBAs que usam EXEC pra fazer um SELECT simples[nao estou falando que EXEC server pra complexos, na verdade, essa nao é a funcao do EXEC], sim, existe, e pior, nao sao poucos.

o problema de se fazer desta forma é vc vai ter que correr atras do conhecimento de possiveis ataques

nao entenda mal, no sentido do seu framework nao funcionar, pelo contrario, ele é muito util em uma camada de proteção em profundida e aviso, por exemplo
1-ataques do tipo simples, ele ja te elimina de cara
2-suponhamos que a cada tentativa seu framework de uma aviso, se este ataque comecar a vir de um unico ponto, vc ja deve se preocupar, e em casos mais criticos, vc bloqueia o acesso desse ponto ao sistema.

SQL Injection nao é minha especialidade, conheco dos ataques que ja sofri e de pessoas que conversei, mas, pense nisso
1-o numero de pessoas sem ter o que fazer na net é muito maior do que o numero de pessoas que tem o que fazer
2-neston, existem 1001 maneiras de se preparar, invente uma

quando se jutam essas e pensamentos, da caquinha…rs

abs
T+

R

Não teria porque entender mal, seus comentários tem sido muito interessantes.
:slight_smile:

K

Não teria porque entender mal, seus comentários tem sido muito interessantes.
:slight_smile:

é que existem aqueles que se vc falar “mal” dos filhos, levam pro mal caminho.

agora me tire uma duvida

seu framework trata todas as requesicoes via POST e GET certo?
porem, como vc faz pra tratar todas elas
muito complexo isso ou nao?

abs
T+

R

Framework é muita bondade sua. O AntiSQLFilter é um mero componente… :slight_smile:

Quando um ServletFilter intercepta uma requisição ele o faz através do método doFilter, que funciona para qualquer tipo de requisição (GET, POST, HEAD, PUT, DELETE, …)

K

rbellia:
Framework é muita bondade sua. O AntiSQLFilter é um mero componente… :slight_smile:

Quando um ServletFilter intercepta uma requisição ele o faz através do método doFilter, que funciona para qualquer tipo de requisição (GET, POST, HEAD, PUT, DELETE, …)

e vc teria algum exemplo,link, tutorial que eu possa dar uma olhada?
isso pode me ser muito util mais pra frente

abs
T+

R

http://java.sun.com/javaee/5/docs/tutorial/doc/bnagb.html

luistiagos

não conheço muito sobre sqlInjection mais se pegasse os parametros passados no request pelo usuario e verificasse se não são nenhum comando sql antes de formar a string de sql para a execução isto não resolveria o problema?

K
luistiagos:
não conheço muito sobre sqlInjection mais se pegasse os parametros passados no request pelo usuario e verificasse se não são nenhum comando sql antes de formar a string de sql para a execução isto não resolveria o problema?

nao, pois existem varias formas de se escrever uma palavra, ascii, unicode, exadecimal, e fora internacionalização, entao correr atras de palavras para bloquealas é complicado

fora que o cracker pode ate conectar ao seu banco sem passar pelo seu sistema

um uma defesa em profundida, sim é util, mas depender apenas disso, é loucura

veja o exemplo no sql server
declare @Valor char(20)   
set @Valor=0x73687574646f776e   
  
select @Valor   
  
exec @valor

abs
T+

K

valeu pelo link
vou dar uma estudada nisso

abs
T+

R

É isso que o componente opensource
http://antisqlfilter.sourceforge.net/pt-br/index.html
se propõe a fazer - O exemplo que o Krusst postou com código em hexadecimal seria detectado, pois o comando exec é reconhecido.

Como o código fonte é aberto seria bem simples aumentar o nível de crítica do componente, por exemplo, quanto a seqüências de escape que tentam driblar o tratamento de parâmetros HTTP.

aí já não estamos mais falando de injeção de SQL.

Rubem_Azenha

Para evitar SQLInjection em Java, basta usar um PreparedStatement.

O seu framework de persistência provavelmente usa isso por trás.

Criado 9 de julho de 2008
Ultima resposta 10 de jul. de 2008
Respostas 11
Participantes 4