Ir para conteúdo

POWERED BY:

Arquivado

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

Filipe_Moraes

[Resolvido] Scripts maliciosos!!

Recommended Posts

Olá, ja li em tantos sites sobre denuncia de users que enviam sripts maliciosos para a BD, que tipo de scripts são esses?? como são enviados, pelos p.e. Textfield?? o que eu posso fazer no meu site para protege-lo contra isto??Não sei se é mt pergunta ao mesmo tempo, mas se puderem me ajudar!!!Agradecia a resposta!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

pesquise sobre sql injection!

Compartilhar este post


Link para o post
Compartilhar em outros sites

tipo, tentei bloquer os comandos (') , (--), (Imagem Postada, insert , drop , delete, xp_

, tenho um formulario chamado "login" e dois campos para preencher, "senha" e "usuario", coloquei o codigo assim:

<%Function LimpaLixo( input )	dim usuario	dim senha	lixo = array ( "select" , "drop" ,  ";" , "--" , "insert" , "delete" ,  "xp_")	usuario = input	 for i = 0 to uBound(lixo)		  usuario = replace( usuario ,  lixo(i) , "")	 next	 LimpaLixo = usuarioend Functionresponse.Redirect("interverifica.asp")%>
Quando coloco o ' or 1=1-- no campo "usuario", continua a dar o erro de sintaxe!!

Tipo de erro:

Microsoft JET Database Engine (0x80040E14)

Erro de sintaxe na cadeia na expressão de consulta '1=1--' and senha = '''.

/rpgmafia/Templates/interverifica.asp, linha 11

 

Onde tenho que colocar este script??

Agradecia a resposta!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal quando falam em guardar scripts maliciosos no banco geralmente não tão falando sobre sql injection, mas mandar códigos html ou javascript para o banco de dados.Digamos que em seu site voce publica matérias e decide fazer um sisteminha pra cadastrar comentários dos usuários. Só que voce permite que o usuário digite o que quiser.Um usuário normal irá escrever "Olá, sou fulano, gostei muito da sua matéria blablalba..."Um usuário malandro irá escrever "<script>document.location='http://www.sitedomalandro.com.br/'</script>"Na hora que voce recupera estes comentários via ASP do BD e joga na sua página, o que irá acontecer???Simples: quem tiver visitando será redirecionado à página do malandro. Sacaram?Solução: só permitir textos simples. Nada de permitir html, javascript, css, etc... Filtre isso tudo antes de mandar para o bd.PS.: Claro que estudar sobre sql injection não preciso nem falar que é fundamental.Té mais...

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, mas cadê a reposta da minha pergunta?? HEHE!!!!! tenho um formulario chamado "login" e dois campos para preencher, "senha" e "usuario", coloquei o codigo assim:<%Function LimpaLixo( input ) dim usuario dim senha lixo = array ( "select" , "drop" , ";" , "--" , "insert" , "delete" , "xp_") usuario = input for i = 0 to uBound(lixo) usuario = replace( usuario , lixo(i) , "") next LimpaLixo = usuarioend Functionresponse.Redirect("interverifica.asp")%>Onde coloco o script?? Porque quando coloco o ' or 1=1-- no campo "usuario", continua a dar o erro de sintaxe!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

ao invez desta funcao use o replace para tirar as aspas simples !variavel = replace(variavel,"'","")deste modo tu tira as aspas simple e oq o cara colocar pesquisa normal como se fosse uma string, só nao vai retornar nada!

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas basta tratar com server.htmlencodeque os JS seram tratados como texto normaligual aqui no forum

Compartilhar este post


Link para o post
Compartilhar em outros sites
ao invez desta funcao use o replace para tirar as aspas simples !

 

variavel = replace(variavel,"'","")

 

deste modo tu tira as aspas simple e oq o cara colocar pesquisa normal como se fosse uma string, só nao vai retornar nada!

Com relação a retirar as aspas simples não é o melhor a fazer. Imagine que seu usuário tenha ela no nome ("D'angelo" como exemplo" e você simplesmente retira essa Aspa Simples, você "descaracterizou" o nome de seu usuário. A solução é trocar essa aspa simples por duas aspas simples, na SQL isso será interpretado corretamente e será utilizada como uma aspa simples no texto.

 

E para evitar "Scripts Maliciosos" é só fazer como disse o Tiu Mário. Server.HTMLEncode na hora de jogar para a tela.

Compartilhar este post


Link para o post
Compartilhar em outros sites

POCHA (não levem a mal), até agora não entendi nada! Falaram falaram mas não respoderam minha pergunta! Eu quero saber ONDE COLOCO AQUELE SCRIPT?? Ta dificil!!!!!!! O que é tratar com server.htmlencode ?? como faço isso??? MAs por favor RESPONDAM A MINHA PERGUNTA!!!!!!!Agradecia a resposta!!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pega ele dobra bem dobradinho e... NÃO, faz isso não, estragar um script bem simpático à tôa.

 

Cara, essa function deve ser usada para tratar as variáveis antes de inserir no BD, usaria +/- assim:

<%
UserName = Request("CampoUsuario")
UserPass = Request("CampoSenha")
Function LimpaLixo(input)

lixo = array ( "select" , "drop" , ";" , "--" , "insert" , "delete" , "xp_")

for i = 0 to uBound(lixo)
input = replace(input, lixo(i) , "")
next

LimpaLixo = input
end Function
UserName = LimpaLixo(UserName)
UserPass = LimpaLixo(UserPass)

'Aqui vai o seu Insert ou Select ou Update.

response.Redirect("interverifica.asp")
%>

Tendeu agora fiu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olah Felipe, naum sou expert mas acho vou ajudar...

 

eh o seguinte... dois codigos aqui abaixo... o primeiro eh igual o seu porem sem o response.redirect na ultima linha...

 

*** Retirando Texto ***<%Function LimpaLixo( input )	dim lixo	dim textoOK	lixo = array ( "select" , "drop" ,  ";" , "--" , "insert" , "delete" ,  "xp_")	textoOK = input	 for i = 0 to uBound(lixo)		  textoOK = replace( textoOK ,  lixo(i) , "")	 next	 LimpaLixo = textoOKend Function%>*** Rejeitando os dados maliciosos: ***<%Function ValidaDados( input )	  lixo = array ( "select" , "insert" , "update" , "delete" , "drop" , "--" , "'")	  ValidaDados = true	  for i = lBound (lixo) to ubound(llixo)			if ( instr(1 ,  input , lixo(i) , vbtextcompare ) <> 0 ) then				  ValidaDados = False				  exit function}			end if	  nextend function%>

No primeiro codigo você retira os caracteres maliciosos de uma string...

 

ex:

dim nome,senha'chamando a primeira funçao...nome = LimpaLixo(request.form("nome"))senha = LimpaLixo(request.form("senha"))

com isso seu texto ficou sem os caracteres "select" , "insert" , "update" , "delete" , "drop" , "--" , "'"

 

soh inserir esse codigo antes do seu response redirect...

 

o segundo codigo eh praticamente a mesma coisa... soh q ele verifica se o codigo estah presente na string... se tiver presente um desses codigos.. "select" , "insert" , "update" , "delete" , "drop" , "--" , "'" ele retorna falso... naum altera o valor das string...

 

abraçoss.... espero ter ajudado...

Compartilhar este post


Link para o post
Compartilhar em outros sites

ahhh, até que enfim!!!! Ai Salgado, num vale apena nem dizer nada, mas obrigado pela resposta!!!! Danilo Ramos, valeu ai pela ajuda, qualquer coisa eu volto ai denovo!! HEHE!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites
ahhh, até que enfim!!!! Ai Salgado, num vale apena nem dizer nada, mas obrigado pela resposta!!!! Danilo Ramos, valeu ai pela ajuda, qualquer coisa eu volto ai denovo!! HEHE!!!
Vale a pena sim, diz pelo menos se funcionou a forma que te passei.

Compartilhar este post


Link para o post
Compartilhar em outros sites

salgado, não funcionou, continua da dar o erro de sintaxe!!!

Vou colocar os codigos para ajudar!!

Codigo do formulario:

<div id="Layer11" style="position:absolute; left:29px; top:183px; width:105px; height:77px; z-index:1; visibility: visible;">  <form action="limpalixo.asp" method="POST" name="login" id="login">

Página "limpalixo.asp":

<%UserName = Request("usuario")UserPass = Request("senha")Function LimpaLixo(input)lixo = array ( "select" , "drop" , ";" , "--" , "insert" , "delete" , "xp_")for i = 0 to uBound(lixo)input = replace(input, lixo(i) , "")nextLimpaLixo = inputend FunctionUserName = LimpaLixo(UserName)UserPass = LimpaLixo(UserPass)response.Redirect("interverifica.asp")%>

Página "interverifica.asp", onde o usuario é autenticado!!

<%Set Conn = Server.CreateObject("AdoDb.Connection")Conn.provider="Microsoft.Jet.OLEDB.4.0"Conn.connectionstring=Server.Mappath("database/database.mdb")Conn.openusuario2 = Request.Form("usuario")senha2 = Request.Form("senha")SQL = "select * from inforuser where usuario = '"&usuario2&"' and senha = '"&senha2&"' "Set RS = Conn.Execute(SQL)If RS.EOF ThenResponse.Redirect ("errologin.asp")elsesession("useractivo")=RS("useractivo")If rs("visitante") = "1" thenResponse.Redirect("personagem.asp")elseResponse.Redirect("jornalmafia.asp")end ifend if%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual a linah que dá erro???

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função deve estar na mesma página do código do login, não precisa separar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloquei na mesma pagina:

<%Set Conn = Server.CreateObject("AdoDb.Connection")Conn.provider="Microsoft.Jet.OLEDB.4.0"Conn.connectionstring=Server.Mappath("database/database.mdb")Conn.openusuario2 = Request.Form("usuario")senha2 = Request.Form("senha")Function LimpaLixo(input)lixo = array ( "select" , "drop" , ";" , "--" , "insert" , "delete" , "xp_")for i = 0 to uBound(lixo)input = replace(input, lixo(i) , "")nextLimpaLixo = inputend FunctionSQL = "select * from inforuser where usuario = '"&usuario2&"' and senha = '"&senha2&"' "Set RS = Conn.Execute(SQL)If RS.EOF ThenResponse.Redirect ("errologin.asp")elsesession("useractivo")=RS("useractivo")If rs("visitante") = "1" thenResponse.Redirect("personagem.asp")elseResponse.Redirect("jornalmafia.asp")end ifend if%>

Mas quando eu coloco a senha e usuario certo, tudo corre bem, até mesmo se eu colocar uma senha errada o sistema funciona como se deve ser, mas se eu colocar 'or 1=1-- da este erro:

 

Tipo de erro:

Microsoft JET Database Engine (0x80040E14)

Erro de sintaxe na cadeia na expressão de consulta 'usuario = ''or 1=1--' and senha = '''.

/rpgmafia/Templates/interverifica.asp, linha 22

 

Agradecia a resposta!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na boa kara... achei que você foi bem ignorante em algumas das respostas alem dos karas te ajudar você ainda que ser ironico... pensa nisso... beleza abraços

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.