1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Login em VB

Discussão em 'Programação' iniciada por RPortela, 30 de Setembro de 2006. (Respostas: 20; Visualizações: 4476)

  1. RPortela

    RPortela Power Member

    boas, eu tenho um formulario de login em que o login e feito atraves da confirmação dos dados da base de dados, agora a minha duvida e a seguinte: como fazer para alterar o nome de utilizador ou a password? neste momento a questao e apenas para o nome de utilizador, a password depois e so adapatar. o codigo que estou a usar e o seguinte:

    If txtuser.Text = user.Text And txtpassword.Text = password.Text And txtnovouser.Text = txtnovouser2.Text Then
    user.Text = txtnovouser.Text
    If MsgBox("O nome de utilizador foi alterado", vbInformation + vbOKOnly, "Erro") = vbOK Then
    frmprincipal.Show
    Unload Me
    End If
    Else
    If MsgBox("Algum dos dados está incorrecto", vbInformation + vbOKOnly, "Erro") = vbOK Then
    txtuser.SetFocus
    End If
    End If

    agora a exlicação:
    eu tenho duas textbox´s como invisiveis ligadas a Bd e essas textbox servem para fazer uma vrificação dos dados, ou seja, o programa verifica se os dados de uma determinada text box sao iguais aos de outra textbox e se forem iguais, faz o login.

    user.Text = txtnovouser.Text --> é aqui que esta o problema: a user.text e a txtbox que esta ligada a base de dados, atraves deste codigo quero colocar o texto da txtbox txtnovouser no texto da user.text,
    como faço para guardar esta alteração??

    já agora, se alguem souber como fazer isto de outra maneira..diga:

    plzz ajudem-me
     
  2. Porque não fazes, o utilizador preenche o campo de usernam e password, e carrega no botao. no onclick do botao, fazes algo do género:

    select * from utilizadores where username = txtuser and passwd = txtpassword

    se retornar valores quer dizer que o utilizador e a password correspondem ao mesmo user. se isto acontecer mandas para o form k te interessa, senao acontecer, crias uma label com o texto "Dados incorrectos". Porque da forma como estás a fazer nunca consegue spor os dados certos nas textbox que tens a hidden.

    Penso ser isto que percebi do teu problema.

    Fica bem.
     
  3. gOnYs

    gOnYs Power Member

    Tinha isto para aqui que tinha feito para a escola espero que dê para tirares alguma ideia:

    Private Sub cmd_ok_Click()
    Data_utilizadores.RecordSource = "SELECT utilizadores.username, utilizadores.password From utilizadores WHERE (((utilizadores.username)='" & Text_utilizador.Text & "'));"
    Data_utilizadores.Refresh
    If Data_utilizadores.Recordset.EOF Then
    MsgBox "Utilizador desconhecido"
    ElseIf Data_utilizadores.Recordset.Fields("password") = Text_password.Text Then
    Unload Me
    principal.Show
    Else
    MsgBox "Passsword Incorrecta"
    End If
    End Sub
     
  4. RPortela

    RPortela Power Member

    já consegui resolver o meu problema através de um metodo "alternativo". se alguem quiser saber detalhes é so perguntar.

    obrigado na mesma pela vossa cooperação.:)
     
  5. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Só uns pormenores:
    1) Não precisas de fazer IF MsgBox() = vbOk. Basta-te a MsgBox. Se o único botão dela é o OK, então já sabes que se o utilizador saiu dela foi por carregar em OK.
    2) Não te aconselho a utilizar uma segunda textbox para guardar a password. Não a podes simplesmente guardar numa variável?

    Cumps [[[[[[[[[[]]]]]]]]]]
    angelofwisdom
     
  6. spastikman

    spastikman Banido

    um pouco offtopic ...

    não tens necessidade de guardar em text box's invisiveis ...

    habitua-te a não usar soluções dessas "marteladas" pq são demasiado faceis de crackar ...
     
  7. RPortela

    RPortela Power Member

    boas,

    1-eu sei que e possivel fazer uma msgbox apenas atraves de msgbox"exemplo" mas eu fiz o if msgbox() = vbok para poder definir o icone da msgbox e o titulo (MsgBox("O nome de utilizador foi alterado", vbInformation + vbOKOnly, "Erro")) eu ja tentei fazer isso sem o =vbok, e deu-me erro; se souberes de alguma maneira de fazr isso avisa :007:


    2- essa era a minha ideia inicial, guardar o valor da bd para uma variavel, e comparar essa variavel com o o texto da textobox onde inserem os dados, mas nao consegui fazer isso, e por isso opetei por este metodo, se souberem uma maneira de fazer isso digam, todas as ajudas sao bem-vindas (e sempre se aprende mais alguma coisa :))


    cumprimentos,
     
  8. spastikman

    spastikman Banido

    comparas o valor directamente com o que está armazenado na BD, sem andares a guardar em variaveis ...
     
  9. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    1)

    MsgBox "O nome de utilizador foi alterado", vbInformation, "Erro"

    MsgBox "Algum dos dados está incorrecto", vbInformation, "Erro"

    2) Eu nunca trabalhei com bases de dados, portanto não sei absolutamente NADA sobre isso. Mas teoricamente, podes ir buscar um valor à base de dados e gravá-lo numa variável, em vez de uma Textbox. Portanto, o local onde tu fazes Text1.Text = <valor>, fazes Variavel = <valor>. Sempre é melhor, porque senão é como o spastikman disse - é bastante fácil de crackar. Por exemplo: se tu não fazes em runtime "TextboxComAPassword.Visible = False", então até algum n00b no cracking pode abrir o teu programa com o ExeScope, mudar a visibilidade da T.B. com a password para True, e ao executar o programa, a textbox está visível, e com ela, a password.

    Se precisares de alguma explicação em algum destes campos diz, mas pode ser preciso postares source code; nem que seja para EU perceber as B.D.'s ;)

    Cumps [[[[[[[[[]]]]]]]]]]
    angelofwisdom
     
  10. RPortela

    RPortela Power Member


    boas,

    nao sabia desse pormenor das msgbox, mas e sempre a aprender e agora ja esta alterado, obrigado;

    em relação as textobox invisiveis, ja as removi, e removi tambem a ligação a base de dados, encontrei um artigo num site que explica isso, e o sistema ja esta a bombar,

    obrigadao :)
     
  11. tahir

    tahir Power Member

    olá...
    será que podias dar referencia ao artigo que encontras-te sobre como fazer o login e mudar o nome de utilizador e palavra passe?
    é que ando a tentar fazer algo semelhante e não tou a encontrar nada que me agrade...
    consigo encontrar artigos para fazer login, mas nã encontro para mudar o nome de utilizador e palavra passe....

    ainda sou um pouco novo nisto e toda a ajuda é bem vinda...

    tanks...
     
  12. flaviorodrigues

    flaviorodrigues Power Member

    eu fis algo assim usando uma base de dados ca fica o codigo

    Tenho 2 caixas de testo, user e pass e um botao entrar, no botao tenho algo assim
    Dim login As Recordset
    Código:
    Set login = bdadmin.OpenRecordset("select nome,pass from admin")
    If login.RecordCount > 0 Then
        login.MoveFirst
        Do While Not login.EOF
            If Text1.Text = login("nome") And Text2.Text = login("pass") Then
                band% = 1
                login.MoveLast
                login.MoveNext
            Else
                login.MoveNext
            End If
        Loop
    End If
    
    If band% = 1 Then 'Text1.Text = login("nome") And Text2.Text = login("pass") Then
        acesso = 1
     inicio.Show 1
    end if
    
    registar user
    Private Sub Command1_Click()
    
    Set admins = bdadmin.OpenRecordset("admin", dbOpenTable)
    admins.AddNew
    admins("nome") = Text1
    admins("pass") = Text2
    admins("email") = Text3
    admins.Update
    
    isto deve ter alguns bugs, isto e de uma area de admin de um projecto que fis ha meses mas ca fica a ideia
     
    Última edição pelo moderador: 27 de Agosto de 2007
  13. tahir

    tahir Power Member

    ok...
    obrigadissimo...
    vou estudar o código.....
     
  14. r3pek

    r3pek Power Member

    Atenção que este código tem uma falha de segurança gravissima....
     
  15. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Realmente acho que esse é precisamente o pior método de autenticar um utilizador. É, de todos, o mais fácil de contornar.


    Acho que um tópico sobre SQL Injection iria dar jeito a muito boa gente...
     
  16. flaviorodrigues

    flaviorodrigues Power Member

    e o que eu postei tambem tem esse problema?
     
  17. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    (pela terceira vez, lá vou eu repetir a mensagem ... o fórum não anda bem :s )
    Segundo o que vi, o teu vai buscar o nome de utilizador e a password à BD, e depois compara-os com os introduzidos pelo utilizador. Nesse aspecto, ele não é passível de SQL injection (até porque o query é fixo. Não há variáveis que o possam adulterar).
     
  18. r3pek

    r3pek Power Member

    exacto.
    Já agora, para kem não sabe, ficar a saber.
    O problema com a abordagem que eu citei acima é o seguinte:

    temos então o seguinte sql: "select user,pass from utilizadores where username='%variavel1%' and password='%variavel2%'"

    e temos uma janelinha bonitinha que nos pede um username e password e depois executa aquele select substituindo os valores das %variaveis%, depois só tenho que comparar kts registos retornou a instrução para ver se as credenciais estão certas. pois, isto funciona, mas mal..... ora vejamos:
    Imaginemos agora que eu introduzo isto ja janelinha:

    /--------------------\
    |user: r3pek .......|
    |pass: ' or '1'='1. |
    | .____ ..............|
    | | OK |..............|
    \-------------------/

    se eu introduzir aquilo tal e qual como está escrito o que vou provocar é que sejam sempre retornados registos e como tal tenho o meu acesso à aplicação/site/whatever garantido quando eu nem sequer um utilizador válido (pois, por aquelo utilizador até pode nem existir).

    Este é o chamado ataque por SQL Injection, que como o nome indica, funciona por "injecção" de SQL nas queries internas do programa.

    Dá pa perceber?!


    EDIT: os pontinhos são uma tentativa triste de por o ASCII art o mais parecido possivel com "art" ;)
     
    Última edição: 28 de Agosto de 2007
  19. Kayvlim

    Kayvlim Undefined Moderator
    Staff Member

    Se quiseres ASCII Art, experimenta usar as tags Code e ficas com o tipo de letra monoespaçado ;)

    Eu já dei por várias vezes as "introduções" do SQL Injection cá no fórum, sempre em PHP/MySQL. Se calhar, vou mesmo escrever qualquer coisa sobre o assunto e colocar cá, para evitar estar constantemente a dar a mesma explicação vezes sem conta.

    edit - aqui está o exemplo mais recente: http://www.techzonept.com/showthread.php?t=182232
     
    Última edição: 28 de Agosto de 2007
  20. r3pek

    r3pek Power Member

    obrigado pela dica :)
    Pois, se calhar é mesmo melhor escrever qualquer coisa sobre o assunto, parece que há muita gente que não está informada sobre o problema. Se precisares de ajuda avisa.
     

Partilhar esta Página