Login immer erfolgreich auch bei Falschen Daten

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Yanbel.

    Login immer erfolgreich auch bei Falschen Daten

    Guten Tag zusammen,

    ich bin kein Profi was Programmierung angeht und mache das ganze nur als Hobby nebenbei, allerdings bin ich auf eine Idee gekommen für ein kleines Tool was mir die Arbeit erleichtern soll (wird bei euch sicher nicht anders sein).

    Ich hoffe ich habe das richtige Label verwendet und bin im richtigen Bereich.
    Erstellt wird das ganze in Visual Basic.

    Es geht mir erst einmal um einen Login zu einer MySQL Datenbank.
    Egal welche Login Daten ich im Tool eingebe ich komm immer rein auch wenn die Daten falsch sind, irgendwas muß ich da wohl falsch machen.

    Hier der Code vom Tool:

    VB.NET-Quellcode

    1. Imports System.Security.Cryptography
    2. Imports System.Text
    3. Public Class login
    4. Public Function MD5StringHash(ByVal strString As String) As String
    5. Dim MD5 As New MD5CryptoServiceProvider
    6. Dim Data As Byte()
    7. Dim Result As Byte()
    8. Dim Res As String = ""
    9. Dim Tmp As String = ""
    10. Data = Encoding.ASCII.GetBytes(strString)
    11. Result = MD5.ComputeHash(Data)
    12. For i As Integer = 0 To Result.Length - 1
    13. Tmp = Hex(Result(i))
    14. If Len(Tmp) = 1 Then Tmp = "0" & Tmp
    15. Res += Tmp
    16. Next
    17. Return Res
    18. End Function
    19. Private Sub Loginbtn_Click(sender As Object, e As EventArgs) Handles Loginbtn.Click
    20. Dim webbrowser1 As New WebBrowser
    21. If TextBox1.Text = Nothing Then
    22. MsgBox("Keinen Benutzername eingegeben!")
    23. Else
    24. If TextBox2.Text = Nothing Then
    25. MsgBox("Kein Passwort eingegeben!")
    26. Else
    27. Dim pwstring As String = MD5StringHash(TextBox2.Text)
    28. webbrowser1.Navigate("https://www.link.de/login.php?username=" & TextBox1.Text & "&password=" & TextBox2.Text)
    29. Do While webbrowser1.ReadyState <> WebBrowserReadyState.Complete
    30. Application.DoEvents()
    31. Loop
    32. If webbrowser1.DocumentText.Contains("Login True") Then
    33. Form1.Show()
    34. Me.Hide()
    35. MessageBox.Show("Login Erfolgreich.")
    36. Else
    37. MessageBox.Show("Die von dir eingegebenen Anmeldedaten sind ungültig.")
    38. End If
    39. End If
    40. End If
    41. End Sub
    42. End Class


    Und das von der PHP Datei:

    PHP-Quellcode

    1. <?
    2. $verbindung = mysql_connect("serverip", "dbuser" , "dbpass")
    3. or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
    4. mysql_select_db("dbname") or die ("Datenbank konnte nicht ausgewählt werden");
    5. $username=$_GET["username"];
    6. $passwort=$_GET["password"];
    7. $abfrage = "SELECT * FROM users WHERE user LIKE '$username' LIMIT 1";
    8. $ergebnis = mysql_query($abfrage);
    9. $row = mysql_fetch_object($ergebnis);
    10. if($passwort == "" or $username == "" or $row->pwd !== $passwort)
    11. {
    12. echo "Login False;";
    13. }
    14. else
    15. {
    16. echo "Login True;";
    17. }
    18. ?>


    Würde mich freuen wenn mir da jemand weiter helfen kann damit ich den Fehler beheben kann.
    Vielen Lieben dank im voraus.
    Willkommen im Forum.

    Ich hab zwar keine Ahnung von PHP, aber in Codeblock#2, Zeile14-#21 steht m.E. sinngemäß: Wenn alle Felder ausgefüllt sind (egal womit!), ist Login = true
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Zeile 22:

    VB.NET-Quellcode

    1. If TextBox1.Text = Nothing Then


    So überprüft man keinen String

    VB.NET-Quellcode

    1. If String.IsNullOrEmpty(TextBox1.Text) Then


    Oder besser:

    VB.NET-Quellcode

    1. If String.IsNullOrWhiteSpace(TextBox1.Text) Then

    Letzteres gibt auch dann true zurück, wenn nur Leerzeichen im String enhalten sind.

    VB.NET-Quellcode

    1. Dim pwstring As String = MD5StringHash(TextBox2.Text)
    2. webbrowser1.Navigate("https://www.link.de/login.php?username=" & TextBox1.Text & "&password=" & TextBox2.Text)

    Check ich nicht... wieso den Hashwert ermitteln, wenn dann doch der PlainText übergeben wird?

    VB.NET-Quellcode

    1. Application.DoEvents()

    Obsolete seit das .NET-Framework diverse Alternativen im Multithreading-Bereich besitzt. Das zu benutzen gilt als schlechter Programmierstil und sollte abgelöst werden. Such hier im Forum einfach mal nach Multithreading, asynchroner Programmierung, etc. Dann findest du recht schnell eine Alternative.

    Wieso das Einloggen funktioniert kann ich dir leider nicht sagen. Meiner Meinung nach dürfte den Einloggen niemals funktionieren, egal ob mit richtigen Daten oder nicht, da du einen gehashten Wert aus der Datenbank (?) mit dem PlainText von der TextBox vergleichst.

    Die Abfrage im PHP Script erschließt sich mir auch nicht wirklich, aber dafür kenne ich mich auch zu wenig mit PHP aus. Ich würde dir allerdings raten, das PHP-Skript so anzupassen, dass Login true nur (!!!) dann ausgegeben wird, wenn Username und Passwort übereinstimmen. Und nicht ich gebe generell Login true zurück, es sei denn Username und Passwort sind nicht gefüllt oder Passwörter stimmen nicht überein. So bist du auf der sicheren Seite. Denn so wird generell immer False geliefert, außer es tritt genau der eine Fall ein, mit dem du Zugriff erhalten sollst.

    PHP-Quellcode

    1. if(row !== null and $passwort == row->pwd and $row->user == $username)
    2. {
    3. echo "Login True;";
    4. }
    5. else
    6. {
    7. echo "Login False;";
    8. }


    PS: Benenn die Controls um, je sprechender die Namen, desto leichter behälst du den Überblick.


    Ein Computer wird das tun, was du programmierst - nicht das, was du willst.

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Yanbel“ ()