WinFuture-Forum.de: Loginsystem - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
  • 3 Seiten +
  • 1
  • 2
  • 3

Loginsystem Nicht getestet


#1 Mitglied ist offline   FenKeN 

  • Gruppe: aktive Mitglieder
  • Beiträge: 221
  • Beigetreten: 22. September 11
  • Reputation: 8
  • Geschlecht:Männlich
  • Wohnort:Erding
  • Interessen:Php, C#, Programmierung

geschrieben 15. Juni 2012 - 08:08

Servus WF-Ler,

ich hab mich mal spontan an die Arbeit gemacht und ein kleines aber hoffentlich funktionierendes Loginsystem geschrieben.
Das ganze kann ich momentan nicht testen, da ich kein xampp oder einen Server hierhabe..
Wäre nett, wenn ihr mir sagt, was ihr davon haltet, was noch fehlt und oder was falsch ist.

<?php
	class login 
	{
		private $Name, $Passwd;

		public function __construct($lname, $lpasswd) 
		{
			$this->Name = $lname;
			$this->Passwd = $lpasswd;

			return LogMeIn();
		}

		//Setter
		private function SetSessionData($DATA) 
		{
			$_SESSION['uid'] = $DATA['uid'];
			$_SESSION['username'] = $DATA['username'];
		}

		//Getter
		//Kann für spätere Erweiterungen verwendet werden
		private function GetSessionData()
		{
			$DATA = array ( 'uid' => $_SESSION['uid'],
							'username' => $_SESSION['username']
						  );
			return $DATA;
		}

		private function LogMeIn() 
		{
			$db = new Database("localhost","user","passwd");
			$log = $db->pdo->prepare("SELECT uid, username FROM users WHERE username=:uName AND passwd=:pwd");
			$log->bindValue(':uName', $this->Name);
			$log->bindValue(':pwd', md5($this->Passwd));
			$log->execute();
			$DATA = $log->fetch();

			if($DATA != null)
			{
				SetSessionData($DATA);

				//Setzt den letzten Klick auf NOW()
				//Erforderlich für die Useronline Liste
				$hits = $db->SetLastHit($DATA);
                                return true;
			}

                        return false;
		}
	}
?>


Aufrufbar wäre das ganze per: $login = new login($name,passwort);


Wenn ihr wollt, könnt ihr das ganze natürlich auch verwenden (Eher so an die Anfänger gedacht).
Würde dann auch noch die Databaseklasse freigeben.

mfg
Cryz

Dieser Beitrag wurde von CryztaN bearbeitet: 15. Juni 2012 - 11:13

MVC Tutorial
<?php
	echo "Liebe Grüße FenKeN";
?>
0

Anzeige



#2 Mitglied ist offline   Rumpelzahn 

  • Gruppe: aktive Mitglieder
  • Beiträge: 75
  • Beigetreten: 27. September 11
  • Reputation: 8

geschrieben 15. Juni 2012 - 09:32

es fehlt mir irgendwie das überprüfen von loginname/passwort, die returns bei false, registration usw ...
oop ist für anfänger allerdings nichts ;)
0

#3 Mitglied ist offline   FenKeN 

  • Gruppe: aktive Mitglieder
  • Beiträge: 221
  • Beigetreten: 22. September 11
  • Reputation: 8
  • Geschlecht:Männlich
  • Wohnort:Erding
  • Interessen:Php, C#, Programmierung

geschrieben 15. Juni 2012 - 09:48

$db = new Database("localhost","user","passwd");
                        $log = $db->pdo->prepare("SELECT uid, username FROM users WHERE username=:uName AND passwd=:pwd");
                        $log->bindValue(':uName', $this->Name);
                        $log->bindValue(':pwd', $this->Passwd);
                        $log->execute();
                        $DATA = $log->fetch();

                        if($DATA != null)
                        {
                                SetSessionData($DATA);

                                //Setzt den letzten Klick auf NOW()
                                //Erforderlich für die Useronline Liste
                                $hits = $db->SetLastHit($DATA);
                        }



Dort prüfe ich doch, ob die eingegebenen Daten in der DB vorhanden sind. Wenn DATA null ist passiert noch nichts. Später könnte man da noch ein "login fehlgeschlagen" etc einbauen. Wenn DATA aber nicht NULL ist, hat er ja Daten gefunden und setzt die Session..

Registration hab ich jetzt mal als Vorraussetzung gesetzt, das dürften auch Anfänger schaffen.
MVC Tutorial
<?php
	echo "Liebe Grüße FenKeN";
?>
0

#4 Mitglied ist offline   Rumpelzahn 

  • Gruppe: aktive Mitglieder
  • Beiträge: 75
  • Beigetreten: 27. September 11
  • Reputation: 8

geschrieben 15. Juni 2012 - 10:09

das passwort lässt du unverschlüsselt?
0

#5 Mitglied ist offline   FenKeN 

  • Gruppe: aktive Mitglieder
  • Beiträge: 221
  • Beigetreten: 22. September 11
  • Reputation: 8
  • Geschlecht:Männlich
  • Wohnort:Erding
  • Interessen:Php, C#, Programmierung

geschrieben 15. Juni 2012 - 10:16

Oh darauf hab ich grad garnicht geachtet. Ist ja auch in 15 Minunten entstanden.
md5() oder sha1() werd ich natürlich noch einbauen
MVC Tutorial
<?php
	echo "Liebe Grüße FenKeN";
?>
0

#6 Mitglied ist offline   Rumpelzahn 

  • Gruppe: aktive Mitglieder
  • Beiträge: 75
  • Beigetreten: 27. September 11
  • Reputation: 8

geschrieben 15. Juni 2012 - 12:36

dann werf ich noch kurz http://php.net/manua...cape-string.php in den raum :-)
0

#7 Mitglied ist offline   FenKeN 

  • Gruppe: aktive Mitglieder
  • Beiträge: 221
  • Beigetreten: 22. September 11
  • Reputation: 8
  • Geschlecht:Männlich
  • Wohnort:Erding
  • Interessen:Php, C#, Programmierung

geschrieben 15. Juni 2012 - 12:42

Und ich antworte dir hiermit..
http://net.tutsplus....atabase-access/

mysql_real_escape_string wird dank PDO sogut wie Nutzlos ;) Wenns um Datenbankzugriffe geht.
Prepared Statements -> falls dir das was sagt ..

Dieser Beitrag wurde von CryztaN bearbeitet: 15. Juni 2012 - 12:43

MVC Tutorial
<?php
	echo "Liebe Grüße FenKeN";
?>
1

#8 Mitglied ist offline   Rumpelzahn 

  • Gruppe: aktive Mitglieder
  • Beiträge: 75
  • Beigetreten: 27. September 11
  • Reputation: 8

geschrieben 15. Juni 2012 - 14:20

danke, PDO sagte mir noch garnichts! schau ich mir mal an.
0

#9 Mitglied ist offline   FenKeN 

  • Gruppe: aktive Mitglieder
  • Beiträge: 221
  • Beigetreten: 22. September 11
  • Reputation: 8
  • Geschlecht:Männlich
  • Wohnort:Erding
  • Interessen:Php, C#, Programmierung

geschrieben 15. Juni 2012 - 14:32

Kein Problem ;)
Der Vorteil von PDO zb ist auch noch, dass du eine Abfrage mehrmals mit verschiedenen Parametern benutzen kannst.
Aber lies dir vorher mal alles durch, dort wird dir schon alles erklärt.
MVC Tutorial
<?php
	echo "Liebe Grüße FenKeN";
?>
0

#10 Mitglied ist offline   Ludacris 

  • Gruppe: Moderation
  • Beiträge: 4.689
  • Beigetreten: 28. Mai 06
  • Reputation: 218
  • Geschlecht:Männlich

geschrieben 15. Juni 2012 - 14:51

Ad OOP und Anfänger: Ich würde JEDEM der beginnt PHP zu Programmieren empfehlen mit OOP zu arbeiten, ich selbst habe zu PHP4 Zeiten damit begonnen wo PHPOOP noch lang nicht im Gespräch war und ich tu mir extrem schwer aus dem prozeduralen Muster herauszukommen - bei größeren Projekten ist das über kurz oder lang ein Todesstoß!

Und zur Passwort Verschlüsselung: Man sollte nie Plain MD5 nehmen!
0

#11 Mitglied ist offline   __42__ 

  • Gruppe: aktive Mitglieder
  • Beiträge: 38
  • Beigetreten: 10. März 12
  • Reputation: 5

geschrieben 15. Juni 2012 - 20:47

Beitrag anzeigenZitat (Ludacris: 15. Juni 2012 - 14:51)

Ad OOP und Anfänger: Ich würde JEDEM der beginnt PHP zu Programmieren empfehlen mit OOP zu arbeiten, ich selbst habe zu PHP4 Zeiten damit begonnen wo PHPOOP noch lang nicht im Gespräch war und ich tu mir extrem schwer aus dem prozeduralen Muster herauszukommen - bei größeren Projekten ist das über kurz oder lang ein Todesstoß!

Gibt genügend große Projekte die prozedural geschrieben sind und dennoch sehr gut funktionieren. Entwickler müssen eben diszipliniert arbeiten, aber das ist auch bei großen OOP-basierten Projekten unumgänglich. Ganz schlimm ist es nur wenn beides vermischt wird. Z.B. in Word-Press der Fall.

Zitat

Und zur Passwort Verschlüsselung: Man sollte nie Plain MD5 nehmen!

Man sollte nie MD5 nehmen.

Zum Code noch etwas reinkommentiert:
<?php
	class login 
	{
		private $Name, $Passwd;

		public function __construct($lname, $lpasswd) 
		{
			$this->Name = $lname;
			$this->Passwd = $lpasswd;

			return LogMeIn(); // Seit wann geben Konstruktoren was zurück?
		}

		//Setter
		private function SetSessionData($DATA) 
		{
			$_SESSION['uid'] = $DATA['uid']; // Seit wann setzen Setter globale Variablen? Und Seit wann sind sie private?
			$_SESSION['username'] = $DATA['username'];
		}

		//Getter
		//Kann für spätere Erweiterungen verwendet werden
		private function GetSessionData()
		{
			// Das macht auch nicht wirklich viel Sinn?
			$DATA = array ( 'uid' => $_SESSION['uid'],
							'username' => $_SESSION['username']
						  );
			return $DATA;
		}

		private function LogMeIn() 
		{
			$db = new Database("localhost","user","passwd");
			$log = $db->pdo->prepare("SELECT uid, username FROM users WHERE username=:uName AND passwd=:pwd");
			$log->bindValue(':uName', $this->Name);
			$log->bindValue(':pwd', md5($this->Passwd)); // md5 ist wie gesagt böse
			$log->execute();
			$DATA = $log->fetch();

			if($DATA != null)
			{
				SetSessionData($DATA);

				//Setzt den letzten Klick auf NOW()
				//Erforderlich für die Useronline Liste
				$hits = $db->SetLastHit($DATA); // unbenutzte lokale Variable
                                return true;
			}

                        return false;
		}
	}
?>

1

#12 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.170
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 15. Juni 2012 - 20:57

Da hab ich mal 2,5 Fragen. Also warum nicht md5 bzw. was dann? und dann verstehe ich das mit der Klasse und der Funktion nicht. Also wenn ich eine Seite mit 25 Logins habe, dann ok aber wenn ich nur ein Login habe, wie das ja so üblich ist, dann muß man doch nicht extra eine Funktion dafür schreiben.
Also nicht falsch verstehen, ich möchte es nicht kritisieren, nur verstehen.

Dieser Beitrag wurde von Holger_N bearbeitet: 15. Juni 2012 - 20:58

Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

#13 Mitglied ist offline   __42__ 

  • Gruppe: aktive Mitglieder
  • Beiträge: 38
  • Beigetreten: 10. März 12
  • Reputation: 5

geschrieben 15. Juni 2012 - 21:16

Beitrag anzeigenZitat (Holger_N: 15. Juni 2012 - 20:57)

Da hab ich mal 2,5 Fragen. Also warum nicht md5 bzw. was dann? und dann verstehe ich das mit der Klasse und der Funktion nicht. Also wenn ich eine Seite mit 25 Logins habe, dann ok aber wenn ich nur ein Login habe, wie das ja so üblich ist, dann muß man doch nicht extra eine Funktion dafür schreiben.
Also nicht falsch verstehen, ich möchte es nicht kritisieren, nur verstehen.

MD5 gilt als gebrochen. Alternativen wären im SHA-Lager zu finden, RipedMD 160, Whirlpool, bcrypt.
Login als eigene Klasse zu modellieren macht wohl selten Sinn, sofern die Klasse nicht als Action-Klasse dient, was hier nicht der Fall zu sein scheint.
0

#14 Mitglied ist offline   Witi 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.947
  • Beigetreten: 13. Dezember 04
  • Reputation: 43
  • Geschlecht:Männlich
  • Wohnort:Kingsvillage
  • Interessen:Frickeln

geschrieben 16. Juni 2012 - 09:58

Du kannst md5 ruhig weiter verwenden, wenn du das Passwort vorher "salzt". Eine einfache Variante mittels des Benutzernamens kann bspw so aussehen:

$log = $db->pdo->prepare("SELECT uid, username FROM users WHERE username=:uName AND passwd=:pwd");
                        $log->bindValue(':uName', $this->Name);
                        $log->bindValue(':pwd', md5($this->Name.$this->Passwd));


1

#15 Mitglied ist offline   Holger_N 

  • Gruppe: aktive Mitglieder
  • Beiträge: 5.170
  • Beigetreten: 11. September 10
  • Reputation: 458
  • Geschlecht:Männlich

geschrieben 16. Juni 2012 - 10:16

Man kann sich doch aber fast überall, wo man sein Passwort vergessen hat, dieses per Mail zuschicken lassen. Dann muß das doch dort mindestens entschlüsselbar oder sogar unverschlüsselt gespeichert sein. Stellt das die Verschlüsselungstechnologien nicht generell in Frage?
Bauernregel: Regnets mächtig im April, passiert irgendwas, was sich auf April reimt.
0

Thema verteilen:


  • 3 Seiten +
  • 1
  • 2
  • 3

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0