Ir para conteúdo

POWERED BY:

Arquivado

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

gpassarelli

SQL Injection

Recommended Posts

Bom galera eu to criando aqui um parte administrativa pra um site...ae um amigo meu me flw algo sobre SQL Injection ...e eu nao sabia oq q era...E ele flw assim...teste lah na area de login colocar Login = ' or '1' = '1Senha = ' or '1' = '1E qnd ver ele conseguiu entrar em td parte administrativa do site...Alguem pode me ajudar para isso nao acontencer?ESPERO AJUDAS....

Compartilhar este post


Link para o post
Compartilhar em outros sites

é só você dar um replace nos campos da variavel que recebe os valores dos campos do formulario tipo assim:nome = request.form("nome")ficaria assimnome = replace(request.form("nome")," ' ", " ")explicação: você esta substituindo na string "request.form("nome")" onde tiver apostrofe por nada, com isso impossibilita a entrada forçada na sua area adm, pense que você pode fazer isso para qualquer caracter q achar q nao seja seguro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, além da alternativa do colega a cima, você pode também bloquear a entrada destes caracteres, retornando ao usuário uma mensagem de erro de caracteres ilegais.Se não quiser fazer estes tipos de verificação você pode adotar um meio mais simples que é o seguinte:Acredito que a sua verificação de login efetua um select no banco pesquisando o usuário com o login e a senha entrada, então tendo o registro no RecordSet, compare os dados entrados com os dados do RS que retornaram do banco. Assim também forcará que faça o login somente quem entrar com o login e senha corretos.vlw.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara,

 

Eu utilizo as seguintes funções:

 

'Substituindo o apóstrofe(') pelo duplo apóstrofe ('')Function ExpurgaApostrofe(texto)	ExpurgaApostrofe = Replace(texto, "'" , "''")End function

'Substituindo os caracteres e palavras maliciosas por vazio("")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 maliciososFunction ValidaDados( input )	  lixo = array ( "select" , "insert" , "update" , "delete" , "drop" , "--" , "'")	  ValidaDados = true	  for i = lBound (lixo) to ubound(lixo)			if ( instr(1 ,  input , lixo(i) , vbtextcompare ) <> 0 ) then				  ValidaDados = False				  exit function			end if	  nextEnd function

Fazendo assim:

 

Login   = Trim(Request.Form("txt_Login"))	Senha = Trim(Request.Form("txt_Senha"))		'Valida as variaveis	Login = ValidaDados(Login)	Senha = ValidaDados(Senha)		If Login And Senha = True Then			Login = Trim(Request.Form("txt_Login"))		Senha = Trim(Request.Form("txt_Senha"))					Login = LimpaLixo(Login)		Senha = LimpaLixo(Senha)	End If

SELECT Login, Senha FROM Usuario WHERE Login = '"&ExpurgaApostrofe(Login)&"' AND Senha = '"&ExpurgaApostrofe(Senha)&"'"

Espero ter te ajudado.

 

Abraço,

 

Pedro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera vlw td mundo ae q me ajudou...mais como eu sou leigo em asp...eu gostaria de saber qual das maneiras acima seria a mais segura para mim?!Obrigado desde jah....Abracos...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara,Eu utilizo tudo isso. Basta colocar em um incluide e chamar na página.Abraço,Pedro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

CAro pedrovisk...Nao entedi mt bem esse seu codigo...tudo isso eh em um arquivo soh?!no arquivo que verifca o user e a senha?Obrigado desde jah...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, pessoalmente acho que o método que citei é de menor complexidade e a prova de falhas, além de que não precisa ficar pensando em todos os caracteres que podem sacanear o seu código.Se ficar na dúvida, faça como foi feito num sistema do meu trabalho: Use Ambos!=B

Compartilhar este post


Link para o post
Compartilhar em outros sites

O básico para bloquear SQLInjection é substituir as ' (aspas simples) por '' (duas aspas simples) e verificar se os campos numéricos realmente estão recebendo números no request utilizando a função IsNumeric().

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salve...Além disso (replaces e tudo mais), alguns procedimentos são bem vistos e aceitos, inclusive recomendados- Utilize tratamento especial para tudo que for ligado ao banco de dados... replaces em palavras maliciosas, em "-", " ' ", "--", etc...- Utilize em suas consultas, inserções e updates comandos por Stored Procedures, que é muito útil e dificulta muito a invasão...- Não utilize nomes padrão para tabelas e campos, por exemplo:Tabela "NOTICIAS", campos "ID, TITULO, TEXTO"... coloque sempre prefixos nas tabelas e campos, exemplo:Tabela "msa_noticias", campos "mtn_id, mtn_titulo", e padronize esses prefixos de forma que fique fácil a ligação de tabelas com campos...Exemplo: "msa = meu site abreviado" / "mtn = minha tabela noticias", etcSão procedimentos simples e muito úteis.. eu que o diga, epois que a famosa Lady Lara entrou em dois clientes meus rs!Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Rafael...oq seria?

- Utilize em suas consultas, inserções e updates comandos por Stored Procedures, que é muito útil e dificulta muito a invasão...

Vlw pela ajuda de tods...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Stored Procedures são "procedimentos" de inserção, consulta, update, delete, etc que você cria direto no SQL Server... ou seja, você cria uma função dentro do próprio SQL server, e no ASP apenas informa os valores que a procedure irá receber...

 

Por exemplo, você cria uma procedure de inserção de notícias com os campos TITULO, CHAMADA e TEXTO, e envia somente os parâmetros para a procedure, exemplo de como ficaria o SQL no ASP:

 

Conn.Execute("EXECUTE sp_CadastraNoticia ('Meu título', 'Minha chamada, 'Meu texto')")

E, sem a stored procedure, seria:

 

Conn.Execute("INSERT INTO tbl_noticias (titulo,chamada,texto) VALUES ('Meu título', 'Minha Chamada', 'Meu texto')")

Ou seja, além de você padronizar códigos de inserções (imagina, se por exemplo, ser necessário alterar o nome do campo da tabela ou da própria tabela, teria qu e estar alterando todos os arquivos que fazem o insert no caso, sendo que com a procedure você iria alterar somente uma vez direto no SQL)...

 

No google você acha bastante info a respeito... comecei a trabalhar com elas faz pouco tempo por recomendação da Prodesp (trabaho no site de uma prefeitura que recentemente foi invadido por sql injection), e estou aprendendo ainda, mas posso lhe afirmar que é muito útil, funcional e simples...

 

Abraços!

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, num sei te informar não... por sorte tenho evitado de trabalhar com access... ufa =)! Mas creio que não, porém não afirmo isso, apenas acho que não!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.