Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Zébástian

SQL Injection

Recommended Posts

Pessoas,

 

De acordo c/ o Jack no fórum do SuperASP Super proteção para sua página aqui, existem várias formas de usar o SQL Injection.

 

Por motivos de ele descreveu no fórum, os comandos do script abaixo são suficientes p/ ñ dar "pau". Eu acabei fazendo algumas modificações p/ ñ apagar mas sim, codificar.

function limpasql(str)troca=split("',=,(,),--,"",xp_,select,insert,update,delete,drop,or,and,all,as,is,null,from,where,like,into,values,set,union,right,left,%,*",",")for arr=0 to ubound(troca)palavra=1 while palavra<>0  palavra=instr(1,lcase(str),troca(arr))  if palavra<>0 then   str=left(str,palavra-1)&"pref1"&asc(mid(str,palavra,1))&"suf1"&right(str,len(str)-palavra)   letra=palavra+letra+len(troca(arr))  end if wendnextstr=replace(str,"pref1","")str=replace(str,"suf1",";")limpasql=strend function
Mas quando se usa o script, acaba sendo usado onde não precisa

 

Por exemplo: Se usar limpasql("Assisti na TV a 1 hora atrás, uma reportagem sobre os Andes")

Vai dar problemas c/ as partes em vermelho: Assisti na TV a 1 hora atras, uma reportagem sobre os Andes..

 

Resumindo: Qual a melhor forma de usar um script assim?? Precisa realmente usar tudo isso mesmo??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos entender como funciona o SQLInjection em campos de texto e numérico.

 

Para a String SQL montada para um login, onde o campo Usuario é texto e senha é obrigatóriamente numérica teriamos o seguinte:

Select campoID From tabela Where usuario = '"& Request("frmUsuario") &"' And senha = "& Request("frmSenha") &";

 

Ao entrarmos com um aspóstrofe teríamos um erro de formatação na String (caso seja no campo texto) e/ou um erro de formato (caso seja no campo numérico). A injeção ocorre pelo uso da plica no campo texto ou pelo " " (espaço) no campo numérico seguidos de comandos SQL padrões (os famosos ' OR 1 = 1", OR '1' = '1' e suas variações).

 

Costumo apenas fazer duas coisas para evitar a SQLInjection, e acho que são suficientes pois evita a passagem da plica sozinha e de texto em campos numéricos. Para campos tipo texto eu faço a troca da plica por duas plicas juntas (isso faz o interpretador SQL entender que se quer o caractere plica no texto a ser procurado/inserido/deletado) e para campos numéricos um teste se o valor é realmente numero. Com isso já se bloqueia a tentativa de injeção de SQL.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não precisa, você "resolve" com apenas issovar = replace(request("campo"),"'","''")

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.