Ir para conteúdo
Fórum Script Brasil
  • 0

Segurança em formulários


Code

Pergunta

Segurança em formulários - ('Or '1' = '1)

Olá.. hoje falarei sobre segurança nos formulários.. principalmente nos Logins!

Muitos novatos desenvolvem seus sites.. pensando que está tudo OK, e tudo mais.. mas na verdade, quando tratamos de algum sistema de onde o usuário se cadastra, e depois efetua o eventual Login, não podemos vacilar.. pois hoje em dia, são muitos os "hackers" por aí... e por isso, toda a segurança é bem vinda!

Bom, para os que não sabem, na maioria dos sites onde tem um sistema de membros, e um botão para efetuar o "LOGIN", se não for muito bem esquematizado, qualquer um pode efetuar um login... mesmo sem saber senha alguma!

É.. é isso mesmo..

Mas isso não acontece em todos as páginas, acontece geralmente nas páginas feitas por gente que não entende muito de SQL, ou até mesmo de Asp..

Bom.. na prática é muito simples.. é só você ir até algum site, e digitar uma aspa simples (') .. e depois clicar em enviar, submit, login, ou algo do genero..

Se ao clicar nesse botão, gerar um belo erro de script, então é isso mesmo.. caminho está livre!

Como fazer? Simples!

Apenas digite no login e na senha:

'OR '1' = '1 .. isso irá liberar um user logado para vc!

Geralmente ele logará com o primeiro REGISTRO do banco de dados.. mas pode acontecer de ser aleatório.. isso depende da estrutura do site em questão..

Imaginem isso: O cara se cadastra em um site de compras online, e lá põe seus dados como CPF, Cartão de crédito, RG, e tudo mais.. para depois se logar, e fazer as compras, que serão debitadas no user dele.. no site mesmo..

Imaginem se alguém se loga no nome dele, rouba os dados, e ainda faz uma compra gigantesca!

Perigoso, não?

E como resolver isso?

Simples! Apenas temos que fazer com que não dê erro em nossas paginas quando alguém digitar o caracter (').. a famosa aspa simples...

Para fazer isso é assim:

A aspa simples é o caracter 39 do teclado..

então usamos um comando que substitui ela por duas delas, pois aí o comando sql entende como se fosse apenas uma, e envia só uma pro BD!

a sintaxe é:

Var_User = Replace(Request.Form("user"),chr(39),"''")

ou, podemos usar a aspa mesmo!

Var_User = Replace(Request.Form("user"),"'","''")

e façam o mesmo para o campo senha..

isso substitui a aspa simples por duas aspas simples.. e apenas uma é inserida no BD! e isso não ocasiona erro algum.

E esse comando, é bem útil em qualquer transação que você for fazer com SQL e banco de dados!

Bom gente.. é isso aí! vocês acham que tem um site seguro? Faz um testezinho lá..

hehehehe

Até mais !!

Abraços!

Dark0!

Outra "falha de segurança" nos scripts mais comuns é que quando fazem o QueryString do url sem fazer a verificação de variáveis estão a possibilitar ao utilizar que coloque qualquer tipo de código.

http://www.site.com/artigo.asp?id=100 é um código correcto, que você aprovaria, mas e se fosse:

http://www.site.com/artigo.asp?id=100; DELETE FROM tblArtigos

?

isto eliminaria o registo da sua base de dados (tabela tblArtigos).

E se tiver artigos apenas para a administração no seu site e limitar o seu acesso a administradores, provavelmente esses artigos seriam demasiado importantes para os utilizadores normais, mas se não fizer a confirmação, pode ser que um url como este faça toda a sua segurança ruir:

http://www.site.com/artigo.asp?id=20 or 1=1

Isto mostraria todos os artigos presentes na tabela especificada na instrução sql.

A SQL Injection é cada vez mais comum, e cabe aos webmasters e webdevelopers garantir a segurança dos dados dos seus websites.

O sistema perfeito em termos de segurança é muito difícil de alcançar, mas para estes casos há uma solução bem fácil.

Para limitar a entrada de dados aos numéricos, o que fará com que o comando OR, AND, DELETE... de sql sejam evitados, poderá utilizar, em vez do comando QueryString algo deste tipo:

 id = CLng(Request("id")) 
Aí se o "mal-intencionado" utilizador colocar OR,AND,DELETE,FROM,;... a página vai dar um erro de conversão pois esses caracteres não podem ser transformados em numéricos:
Microsoft VBScript runtime error '800a000d' 

Type mismatch: 'CLng' 

/artigo.asp, line x

E não se esqueça, eles realmente ANDAM AÍ!

Mas existem muitas maneiras de fazer sql injection, não pense que só por causa destas duas (da do dark0 e da minha) você já é imune aos hackers e crackers... existem sempre uma porta traseira, e senão houver há sempre a porta lateral, a janela, a chaminé, a porta do gato, a chave debaixo do tapete...

Há que saber "trancar todas as portas", e se isso não for possível, pelo menos tente "camuflar as entradas"...

Penso que vocês perceberam o que eu quis dizer.

Espero ter ajudado.

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...