Login Syscherheit

  • VB.NET

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Patrick1993.

    Login Syscherheit

    Hallo,

    ich hab ein Login System geschrieben das leider ein Moderator nach wenigen Minuten Gegrackt hat.
    Es wird überprüft welcher Benutzergruppe der User angehört z.b. Test = userID(1) dann Login OK / Test = userID(2) dann Login Falsch
    Er hat es geschafft die Abfrage so zu manipulieren das er mit seinem Namen einfach userID 1 zurück bekommt.

    Meine Frage an euch wie könnte ich das ganze System Sicherer machen?

    VB.NET-Quellcode

    1. Dim wc As New WebClient
    2. Dim user As String = TextBox1.Text
    3. Dim webbrowser1 As New WebBrowser
    4. Dim lbltext As String = Label2.Text
    5. Dim uri As New Uri("http://.com/auslesen.php?uid=" & user)
    6. Dim hwid As New Uri("http://.com/hwid.php?hwid=" & user)
    7. Dim resultstring As String = wc.DownloadString(uri)
    8. Dim resultstring1 As String = wc.DownloadString(hwid)
    9. Label4.Text = (resultstring)
    10. Label1.Text = (resultstring1)
    11. If Label4.Text = "6" OrElse Label4.Text = "5" OrElse Label4.Text = "12" OrElse Label4.Text = "9" OrElse Label4.Text = "10" OrElse Label4.Text = "11" Then
    12. Else
    13. MessageBox.Show("Wrong User ID", "ID Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    14. End
    15. End If
    16. If Label1.Text = "" Then
    17. webbrowser1.Navigate("http://.com/schreiben.php?hwid=" & user & "&labeltxt=" & lbltext)
    18. MessageBox.Show("Please restart the application", "Restart Error", MessageBoxButtons.OK, MessageBoxIcon.Information)
    19. Application.Exit()
    20. ElseIf Label1.Text = Label2.Text = True Then
    21. ElseIf Label1.Text = Label2.Text = False Then
    22. MessageBox.Show("Wrong Hardware ID", "HWID Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    23. End
    24. End If
    25. If Login(TextBox1.Text, TextBox2.Text) Then
    26. Me.ShowInTaskbar = False
    27. MessageBox.Show("Login Successfully" & vbCrLf & "Welcome " & TextBox1.Text, "Login", MessageBoxButtons.OK, MessageBoxIcon.Information)
    28. My.Computer.FileSystem.WriteAllText("C:\settings.cs", TextBox1.Text, False)
    29. Else
    30. MsgBox("Incorrect Username/Password")
    Bin mir nich sicher ob das was bringt aber du Arbeitest mit der GET Methode.
    Diese hängt einfach was an die Domain an.

    Deine Adresse heißt:
    .com/hwid.php?hwid=

    dort kann man wenn man die gesamte Domain + ID kennt ganz einfach eine ID (in deinem falle 1 oder 2) hinten drane hängen.
    Wie gesagt, ist nur eine Vermutung.

    Ich würde solche sachen mit POST regeln da kann man nichts anhängen oder sonst was.
    Die POST Variablen dann anständig escapen und dann sollte das ganze etwas sicherer sein

    Einfach GET mit POST ersetzen?

    die hwid.php sieht so aus.

    SQL-Abfrage

    1. <?php
    2. @mysql_connect('localhost', 'DB', 'PW') or die (sqlerror(mysql_errno(), mysql_error()));
    3. @mysql_select_db('DBT') or die ('Es konnte keine Verbindung zur Datenbank hergestellt werden');
    4. $auslesen2 = mysql_real_escape_string($_GET['hwid']);$result2 = mysql_query("SELECT `userhwid` FROM `user` WHERE `username`='". $auslesen2 ."'");
    5. $row = mysql_fetch_array($result2);
    6. echo $row[0];
    7. ?>
    $_GET['hwid']<--- zu $_POST['hwid']; machen und dann in deinem Code halt die Stellen anpassen.
    Ich glaube POST an PHP von VB zu übergeben da ging das mit NameValueCollections

    Ob man nun GET oder POST benutzt ist herzlich egal. Er kann aber gerne HTTPS einsetzen, um es eine Ecke sicherer zu machen.
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.
    @Lukas:
    Das ganze von mir war nur eine Vermutung da in PHP die GET geschichte bei Logins gerne mal Kritisiert wird.

    @TE:
    ich glaube dann musst du anstatt HTTP nur HTTPS schreiben

    da hilft dir alles nichts. kannst ja die "1" per IL-OP Codes direkt in die Anwendung patchen.
    Daher: bringt nichts. Außerdem kannst du mit einer einzigen Anweisung die komplette Prozedur beenden lassen.

    Nutz Session-Variablen und lass den User per Name/Passwort identifizieren, eine Session Variable zurückgeben, die nur diesem einen User zugeordnet werden kann,
    Außerdem solltest du serverseitig prüfen, ob die Session valide ist und der User Zugriff auf den Bereich hat.
    Sessions arbeiten z.b. so (nutze ich in fast allen meinen Logins):
    ganz oben schreibst du session_start() (sollte selbst erklärend sein).
    Dort wo dann das Login "Erfolgreich" ist schreibst du sowas wie:

    PHP-Quellcode

    1. $_SESSION['username'] = $username;

    Dann hast du den Usernamen von dem User in einer sogenannten SESSION Gespeichert.

    Dann in einer weiteren Datei schreibst du wieder ganz oben session_start(); (so wurde es mir erklärt) und darunter schreibst du dann eine IF-Abfrage in der du Prüfen tust ob eine SESSION vorhanden ist.

    Das geht z.b. so:

    PHP-Quellcode

    1. if (!isset($_SESSION['username'] == $_POST['username'))
    2. {
    3. echo "Du bist nicht eingeloggt";
    4. exit;
    5. }


    Das ist ein kleines Beispiel wie so eine SESSION funktionieren kann.

    PHP-Quellcode

    1. if (!isset($_SESSION['username'] == $_POST['username'))

    was soll das denn werden?

    Eher

    PHP-Quellcode

    1. if(isset($_SESSION["username"]))
    „Was daraus gefolgert werden kann ist, dass jeder intelligentere User sein Geld lieber für Bier ausgibt, um einen schönen Rausch zu haben, und nicht dieses Ranzprodukt.“

    -Auszug aus einer Unterhaltung über das iPhone und dessen Vermarktung.

    Lukas schrieb:

    was soll das denn werden?
    Mir wurde es damals als ich PHP gelernt habe so erklärt aber die 2te Variante macht mehr sinn da gebe ich dir recht