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

(Resolvido) Segurança de Logins (SQL INJECT)


evertonviana

Pergunta

Galera,

Não sei se é do conhecimento de todos, mas essa semana tive uma aula na faculdade, cadeira de Segurança(faço faculdade de redes), e aprendi uma falha de segurança, que pelo o que pude perceber, esta presente em vários sites inclusive em grandes portais. Utilizando do método SQL INJECT, você sem ter acesso a usuário e senha de determinado portal, pode efetuar login em um site utilizando de Strings de consulta, como:

' or'1--

' or '1'='1

' or 1=1--

'or''='

' or 'a'='a

') or ('a'='a

b' or ' 1='

' or '1

' or '|

Basta adicionar alguma dessas Strings no usuário e na senha e tentar efetuar o login, vocês poderão perceber que vários sites menores e até os que fazemos aceitam e liberam o acesso.

Minha pergunta é, como fazer com que isso não aconteça, pois pelos testes que fiz em meus desenvolvimentos, todos ou 90% sofrem dessa falha de segurança...

No aguardo

Editado por evertonviana
Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

Normalmente este tipo de falhas de segurança ocorrem quando se trabalha com versões já muito antigas de PHP, mas onde existe esse problema é mais nos CGIs que são programados com linguagens de baixo nível, onde tens que ser tu a programar todas as condições de segurança.

Exemplo no PHP ao enviares uma string agora via php ele esta configurado por segurança para ser vista como $string=" \' or\'1--\' or \'1\'=\'1\' or \'| "

assim \' é interpretado como um carácter da string e não um delimitador exemplo

SELECT * FROM users WHERE user="aaaaa" AND pass='\' or \'1\'=\'1\' \' '

já se estiveres a fazer um programa CGI em c se não tratares a string ele vai ler

SELECT * FROM users WHERE user="aaaaa" AND pass='' or '1'='1'

o que é uma falha de segurança já que entras no sistema sem pass :ninja:

cumprimentos.

Link para o comentário
Compartilhar em outros sites

  • 0
Normalmente este tipo de falhas de segurança ocorrem quando se trabalha com versões já muito antigas de PHP, mas onde existe esse problema é mais nos CGIs que são programados com linguagens de baixo nível, onde tens que ser tu a programar todas as condições de segurança.

Exemplo no PHP ao enviares uma string agora via php ele esta configurado por segurança para ser vista como $string=" \' or\'1--\' or \'1\'=\'1\' or \'| "

assim \' é interpretado como um carácter da string e não um delimitador exemplo

SELECT * FROM users WHERE user="aaaaa" AND pass='\' or \'1\'=\'1\' \' '

já se estiveres a fazer um programa CGI em c se não tratares a string ele vai ler

SELECT * FROM users WHERE user="aaaaa" AND pass='' or '1'='1'

o que é uma falha de segurança já que entras no sistema sem pass :ninja:

cumprimentos.

você tá na seção ASP e não PHP.... não se esqueça... e evite posts desnecessários

Link para o comentário
Compartilhar em outros sites

  • 0

Galera, consegui aqui dando minhas cabeçadas, segue a solução que funcionou pra mim:

Form de Login

<form method="POST" action="verifica.asp">

            <p align="center"><b><font face="Verdana"><font size="2">Login:
            </font><input type="text" name="login" size="20"><font size="2"><br>
            Senha: </font><input name="senha" size="20"></font></b></td>
        <p align="center"><input type="submit" value="Submeter" name="B1"></p>
      </form>
PAGINA PARA EVITAR O SQL INEJCT
<%
login = request.form("login")
senha = request.form("senha")

str = login

str = trim(str)
str = lcase(str)

str = replace(str, "-", "")
str = replace(str,"=","")
str = replace(str,"'","")
str = replace(str,"""""","")
str = replace(str,"or","")
str = replace(str,"and","")
str = replace(str,"(","")
str = replace(str,")","")
str = replace(str,"<","[")
str = replace(str,">","]")
str = replace(str,"update","")
str = replace(str,"-shutdown","")
str = replace(str,"--","")
str = replace(str,"'","")
str = replace(str,"#","")
str = replace(str,"$","")
str = replace(str,"%","")
str = replace(str,"¨","")
str = replace(str,"&","")
str = replace(str,"'or'1'='1'","")
str = replace(str,"--","")
str = replace(str,"insert","")
str = replace(str,"drop","")
str = replace(str,"delet","")
str = replace(str,"xp_","")
str = replace(str,"select","")
str = replace(str,"*","")
str = replace(str,"","0")

str1 = senha

str1 = trim(str1)
str1 = lcase(str1)

str1 = replace(str1, "-", "")
str1 = replace(str1,"=","")
str1 = replace(str1,"'","")
str1 = replace(str1,"""""","")
str1 = replace(str1,"or","")
str1 = replace(str1,"and","")
str1 = replace(str1,"(","")
str1 = replace(str1,")","")
str1 = replace(str1,"<","[")
str1 = replace(str1,">","]")
str1 = replace(str1,"update","")
str1 = replace(str1,"-shutdown","")
str1 = replace(str1,"--","")
str1 = replace(str1,"'","")
str1 = replace(str1,"#","")
str1 = replace(str1,"$","")
str1 = replace(str1,"%","")
str1 = replace(str1,"¨","")
str1 = replace(str1,"&","")
str1 = replace(str1,"'or'1'='1'","")
str1 = replace(str1,"--","")
str1 = replace(str1,"insert","")
str1 = replace(str1,"drop","")
str1 = replace(str1,"delet","")
str1 = replace(str1,"xp_","")
str1 = replace(str1,"select","")
str1 = replace(str1,"*","")
str1 = replace(str1,"","0")


session("login1") = str
session("senha1") = str1

Response.Redirect"login.asp"
%>
PAGINA QUE EFETUA O LOGIN
<%
set conexao = server.createObject("adodb.connection")
conexao.Open "Provider=Microsoft.JET.OLEDB.4.0; Data Source=" & server.MapPath("login.mdb")
'---------------------------------------------------------------

sql = "select * from login where login = '"&session("login1")&"' and senha = '"&session("senha1")&"'"

set rsLogin_teste = conexao.execute(sql)

if not rsLogin_teste.eof then

Session("login")=TRUE
Session("senha")=TRUE
Response.Redirect"default_logado.asp"

rsLogin_teste.close
set rsLogin_teste = nothing
'---------------------------------------------------------------

else

Response.Redirect"logon_falha.asp"

end if

conexao.close
set conexao = nothing
%>

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

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