Login



  • cin>>login;
    

    Änder das zu

    getline(cin, login);
    

    die Folge ist, dass nicht bis zum nächsten Leerzeichen, sondern bis zum nächsten \n nach login kopiert wird.



  • Ominion: Grausam. Versuch mal nicht so tief zu verschachteln:

    // nur Struktur verändert
    #include <iostream>
    #include <windows>
    #include <string>
    using namespace std;
    
    int main ()
    {
        string loginuser = "User";
        string loginpass = "passwort";
        string user;
        string pass;
        bool login = false;
    
        while (!login)
        {
            cout << "Loginname: ";
            cin >> user;
    
            if (loginuser != user)
            {
            	cout << "Der Name ist leider nicht korrekt." << endl;
                continue;
            }
    
            cout << "Loginpasswort: ";
            cin >> pass;
    
            if (loginpass != pass)
            {
            	cout << "Das Passwort ist leider nicht korrekt." << endl;
                continue;
            }
    
            cout << "Login erfolgreich." << endl;
            login = true;
        }
    
        Sleep (2000);
    
        return 0;
    }
    


  • An continue habe ich so schnell garnicht gedacht! Zu getline(): Ist ja erstmal egal. Das wird dann nur relevant, wenn man die Daten dann aus einer Datenbank auslesen kann, und sich User richtig registrieren können. Aber für Testzwecke brauch man das noch nicht

    Mfg Ominion



  • @Maddyn: Du kannst das else auch weglassen!

    Mfg Ominion



  • Ominion schrieb:

    Zu getline(): Ist ja erstmal egal. Das wird dann nur relevant, wenn man die Daten dann aus einer Datenbank auslesen kann, und sich User richtig registrieren können. Aber für Testzwecke brauch man das noch nicht

    Schwachsinn, genau das war Maddyns Problem, denn wie dir selbstverständlich aufgefallen ist, besteht "list games" aus zwei Wörtern.



  • ~Ist mir nicht aufgefallen! *in die Ecke verkriech*~
    Ok Maddyn:

    Ominion schrieb:

    Zu getline(): Ist ja erstmal egal. Das wird dann nur relevant, wenn man die Daten dann aus einer Datenbank auslesen kann, und sich User richtig registrieren können. Aber für Testzwecke brauch man das noch nicht

    Diese Stelle brauchst du nicht zu beachten 🕶

    Mfg Ominion



  • Michael E. schrieb:

    Ominion: Grausam.

    Na dann kann mans aber auch gleich so schreiben:

    #include <iostream>
    #include <windows>
    #include <string>
    using namespace std;
    
    int main (void)
    {
        string loginuser = "User";
        string loginpass = "passwort";
        string user;
        string pass;
    
        while (1)
        {
            cout << "Loginname: ";
            cin >> user;
            cout << "Loginpasswort: ";
            cin >> pass;
    
            if ((loginuser == user) && (loginpass == pass))
            {
                cout << "Login erfolgreich." << endl;
                break;        	
    
            }        
            cout << "Name und Passwort stimmen nicht überein!" << endl;    
        }
    
        Sleep (2000);
    
        return 0;
    }
    


  • Es soll ja nur weiter gehen, wenn der Username überhaupt vorhanden ist. Aber trotzdem ne gute Idee.

    Mfg Ominion

    PS: Ihr müsst euch nicht weiter um meinen Code kümmern. Ich habe damit kein Problem.



  • immigrant: Ich würd so eh keinen Login schreiben. Es ging mir nur darum, aus der Megaverschachtelung rauszukommen.



  • Ominion schrieb:

    Es soll ja nur weiter gehen, wenn der Username überhaupt vorhanden ist.

    Jetzt bin ich allerdings gespannt, wie hierfür die Begründung aussieht.



  • Michael E. schrieb:

    Jetzt bin ich allerdings gespannt, wie hierfür die Begründung aussieht.

    Was meinst du damit?

    Mfg Ominion



  • Es mag zwar etwas lächerlich erscheinen, wenn ich bei diesem Code mit Sicherheitsfragen anfang, aber wieso sollte ein Brute-Forcer merken, dass er schon mal den richtigen Benutzernamen herausgefunden hat und nur noch nach dem richtigen Passwort zu suchen braucht?



  • Das meinst du. Ich bin jetzt nicht vom bösen Willen, sondern vom guten Willen der Benutzerausgegangen. Und deshalb finde ich es besser, wenn er nicht erst die Eingaben machen muss, sondern gleich gesagt bekommt, dass da was falsch ist.

    Mfg Ominion

    PS: Wenn man aber vom Bösen im Menschen ausgeht, ist dein Argument besser als meins.



  • Ominion schrieb:

    Das meinst du. Ich bin jetzt nicht vom bösen Willen, sondern vom guten Willen der Benutzerausgegangen.

    Aiaiai 🕶



  • Hallo,
    ich beschäftige mich grade mit buffer Overflow und wollte wissen, ob das nicht zimlich gefährlich ist:

    #include <iostream>
    #include <windows>
    #include <string>
    using namespace std;
    
    int main (void)
    {
        string loginuser = "User";
        string loginpass = "passwort";
        string user;
        string pass;
    
        while (1)
        {
            cout << "Loginname: ";
            cin >> user;
            cout << "Loginpasswort: ";
            cin >> pass;
    
            if ((loginuser == user) && (loginpass == pass))
            {
                cout << "Login erfolgreich." << endl;
                break;           
    
            }        
            cout << "Name und Passwort stimmen nicht überein!" << endl;    
        }
    
        Sleep (2000);
    
        return 0;
    }
    


  • Tut mir leid, ich seh grad keine Gefahr für einen Buffer Overflow. Wo ist es deiner Ansicht nach gefährlich?

    Viel überzeugender ist doch, dass jeder Depp mit Notepad das Passwort aus der exe lesen kann 😮



  • joasdoj schrieb:

    wollte wissen, ob das nicht zimlich gefährlich ist: [...]

    wie kommst du darauf??



  • Es sollte ja auch nur eine Übung sein, und nicht unbedingt sicher.

    Mfg Ominion



  • habs aus fun einfach mal mit nem editor geöffnet, also die exe datei allerding kann ich es auf die schnelle nicht auslesen wo und wie das passwort ist O.o

    Wie sieht es denn in sachen Schutz damit aus? Und kann man das passwort bei der Eingabe als "sternchen" darstellen?

    ich brauche zwar keinen solchen Schutz da es einfach nur zum langsamen erlernen von C++ dient. Will dieses Programm immer wieder erweitern um meine Fortschritte speichern zu können.

    Allein durch eure hilfe habe ich bisher mehr gelernt als in einem halbjahr in der Schule ^^ dafür ein großes Lob an euch und ein dangeschön.



  • Maddyn schrieb:

    habs aus fun einfach mal mit nem editor geöffnet, also die exe datei allerding kann ich es auf die schnelle nicht auslesen wo und wie das passwort ist O.o

    Such doch einfach mal nach passwort (also Notepad suchen lassen).

    Wie sieht es denn in sachen Schutz damit aus?

    Das ist ein sehr kompliziertes Thema und würd ich dir nicht für den Anfang empfehlen. Wenns dich dennoch interessiert, schau dir mal an, wie ein sog. HackMe geschrieben wird.

    Und kann man das passwort bei der Eingabe als "sternchen" darstellen?

    Siehe in der Konsolen-FAQ

    Allein durch eure hilfe habe ich bisher mehr gelernt als in einem halbjahr in der Schule

    Ich sehe schreckliches auf mich zukommen... (bekomme nächstes Schuljahr Info als GK).


Anmelden zum Antworten