WinFuture-Forum.de: [php] Login Mit Sessions - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

[php] Login Mit Sessions


#1 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.476
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 06. Juni 2005 - 18:19

Hallo zusammen.

Ich bin gerade dabei anzufangen ein Web-System aufzubauen.
Ich habe den Anfang mit dem Template und dem Login/Registrieren gemacht.
Die Benutzerdaten werden aus der Datenbank gelesen und es wird, bei erfolgreichem Login, eine Session mit der User-ID registriert.
Dies ist natürlich erst der rohe Anfang des Scripts und das muss noch weit entwickelt werden.

Aber hier mal die Dateien/Codes...:

mitglieder.php
<?php
include('design.inc.php');
seite_anfang("Mitgliederbereich");

$action = (isset($_GET['action'])) ? $_GET['action'] : 'start';

switch($action)
{
	case 'start':

  if(!isset($_SESSION['userid']))
  {
 	 include('tpl/login-formular.html');
  }
  else
  {
 	 $mitglied = mysql_fetch_array(mysql_query("SELECT * FROM mitglieder WHERE id = '".$_SESSION['userid']."'"));

 	 include('tpl/mitglieder-start.html');
  }

	break;

	case 'registrierung':

  include('tpl/registrierungs-formular.html');

	break;

}


seite_ende();
?>


login.php
<?php
include('functions.inc.php');
db_connect();

$benutzername = "";
$passwort = "";

	if(isset($_POST['benutzername']) and !empty($_POST['benutzername']))
	{
  $benutzername = mysql_real_escape_string($_POST['benutzername']);
	}

	if(isset($_POST['passwort']) and !empty($_POST['passwort']))
	{
  $passwort = mysql_real_escape_string($_POST['passwort']);
	}

  $login_result = mysql_query("SELECT id FROM mitglieder WHERE benutzername = '$benutzername' AND passwort = '$passwort'");

 	 if(mysql_num_rows($login_result) == 1)
 	 {
    session_start();
    session_register('userid');
    $_SESSION['userid'] = mysql_result($login_result,0,"mitglieder.id");

 	 }
    header("Location: mitglieder.php");
?>


Die anderen Dateien sind:
- design.inc.php: Für das templatefähige Seitendesign
- functions.inc.php: Hier werden die Funktionen gespeichert (z.B: db_connect(); stellt Verbindung mit der Datenbank her)
- logout.php: Zerstört die Sessions und die userID-Session
- registrierung.php: Hier kann man sich registrieren für den Login...

Ihr könnt dieses Loginsystem mal unter folgendem Link testen:
Hier klicken!

Benutzername: admin
Passwort: admin

Ihr könnt euch auch anmelden und dann mal einloggen... ;)

1.) Vielleicht fällt jemand von euch etwas in dem Code auf, das man verbessern könnte. Es funktioniert eigentlich alles, aber mit Sessions habe ich noch nicht so große Erfahrungen gemacht, deswegen hier noch eine wichtige Frage:

2.) Ist es im Moment so wie ich es mache sicher genug, dass niemand fremdes sich einloggen kann? Ich will das Passwort später noch mit md5(); verschlüsseln. Aber die Session "userid" dürfte zur sicheren Überprüfung ausreichen, oder?

3.) Dann habe ich noch ein Problem und zwar beim Login. Obwohl ich als Passwort z.B. "test" und als Benutzername "Test" wähle, kann ich mich mit Benutzername = "test" und Passwort = "TEST" einloggen. Das sollte ja eigentlich nicht der Fall sein. Wie muss ich da meine Überprüfung ändern, damit er die Groß- und Kleinschreibung beachtet?

4.) Was würdet ihr allgemein daran noch verbessern und was stört euch eventuell an diesem Script?

Beachtet bitte, dass ich heute erst damit angefangen habe und das noch groß ausbauen will ;)
Später kommt auch noch mehr als nur der Benutzername und das Passwort zur Registrierung, das ist logisch :)

Danke für eure Hilfe schon mal im Voraus!

Grüße,
Slayer.

Dieser Beitrag wurde von Slayer bearbeitet: 06. Juni 2005 - 19:07

Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

Anzeige



#2 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 06. Juni 2005 - 19:23

Erstmal was zur Groß-/Kleinschreibung. Probier es mal so:
$login_result = mysql_query("SELECT id FROM mitglieder WHERE benutzername = '$benutzername' AND BINARY passwort = '$passwort'");


Das macht das Passwort case-sensitive. Das mit dem Benutzernamen kann so bleiben finde ich, da sollte man nicht so auf Groß- und Kleinschreibung achten.

Zur Sicherheit kann ich folgendes empfehlen:
http://phpsec.org/pr...ts/guide/4.html

Meine Empfehlung wäre eine Überprüfung der IP Adresse (nicht des Useragents).
0

#3 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 07. Juni 2005 - 13:14

Was mir grade noch einfällt: Wenn du die Passwörter mit md5 verschlüsselst, ist es egal ob die Überprüfung case sensitive oder insensitive ist weil md5 Zeichenketten immer nur Kleinbuchstaben enthalten.
0

#4 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.476
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 07. Juni 2005 - 14:05

Zitat (Floele: 06.06.2005, 20:23)

Erstmal was zur Groß-/Kleinschreibung. Probier es mal so:
$login_result = mysql_query("SELECT id FROM mitglieder WHERE benutzername = '$benutzername' AND BINARY passwort = '$passwort'");


Das macht das Passwort case-sensitive. Das mit dem Benutzernamen kann so bleiben finde ich, da sollte man nicht so auf Groß- und Kleinschreibung achten.

Zur Sicherheit kann ich folgendes empfehlen:
http://phpsec.org/pr...ts/guide/4.html

Meine Empfehlung wäre eine Überprüfung der IP Adresse (nicht des Useragents).
<{POST_SNAPBACK}>

Danke. Also brauche ich nur den Befehl "BINARY" vor der Überprüfung ;)
Du meinst die IP-Adresse soll auch als Session registriert werden und später abgefragt werden?
Wie z.B.
if($_SESSION['user_ip'] == $aktuelle_ip)


Zitat (Floele: 07.06.2005, 14:14)

Was mir grade noch einfällt: Wenn du die Passwörter mit md5 verschlüsselst, ist es egal ob die Überprüfung case sensitive oder insensitive ist weil md5 Zeichenketten immer nur Kleinbuchstaben enthalten.
<{POST_SNAPBACK}>

Aber wenn ich ein Passwort z.B. mit Test eintrage, anstatt mit test, dann wird die md5-Zeichenkette ja auch anders... Ist eigentlich md5 bei Passwörtern sehr zu empfehlen? Und kann man md5-verschlüsselte Passwörter später irgendwie wieder entschlüsseln.

PS: Meinen Code oben habe ich schon weiter aufgebaut...
Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

#5 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 07. Juni 2005 - 14:36

Zitat (Slayer: 07.06.2005, 15:05)

Du meinst die IP-Adresse soll auch als Session registriert werden und später abgefragt werden?
Wie z.B.
if($_SESSION['user_ip'] == $aktuelle_ip)


Ja, sowas meine ich.

Zitat

Aber wenn ich ein Passwort z.B. mit Test eintrage, anstatt mit test, dann wird die md5-Zeichenkette ja auch anders...


Eben. Deswegen ist das PW ja automatisch case-sensitive.

Zitat

Ist eigentlich md5 bei Passwörtern sehr zu empfehlen? Und kann man md5-verschlüsselte Passwörter später irgendwie wieder entschlüsseln.


Wüsste nicht was gegen md5 einzuwenden wäre. Man kann sie nicht mehr entschlüsseln, höchstens mit Brute-Force.
0

#6 Mitglied ist offline   linksta 

  • Gruppe: aktive Mitglieder
  • Beiträge: 4.319
  • Beigetreten: 16. Dezember 04
  • Reputation: 2

geschrieben 07. Juni 2005 - 14:38

wenn ich mal fragen darf: was soll das genau werden? unter "web System" kann ich mir nix vorstellen
auf unbestimmte zeit offline
<3 Adblock
0

#7 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.476
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 07. Juni 2005 - 14:39

Zitat (Floele: 07.06.2005, 15:36)

Ja, sowas meine ich.
Eben. Deswegen ist das PW ja automatisch case-sensitive.
Wüsste nicht was gegen md5 einzuwenden wäre. Man kann sie nicht mehr entschlüsseln, höchstens mit Brute-Force.
<{POST_SNAPBACK}>

Dann müssten die Abfragen wegen der Session-IP halt noch dazu, aber Sicherheit geht vor ;)
Wegen md5-Passwörtern: Wenn ich nachher eine Funktion "Passwort vergessen" einbauen will und das Passwort per E-Mail an das Mitglied schicken will, dann geht das doch aber nicht mehr, weil er ja dann nur die md5-zeichenkette schickt und nicht das eigentliche Passwort, oder?
Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

#8 Mitglied ist offline   Floele 

  • Gruppe: aktive Mitglieder
  • Beiträge: 919
  • Beigetreten: 22. Juni 04
  • Reputation: 0

geschrieben 07. Juni 2005 - 14:40

Korrekt. Da musst du dem Benutzer ein neues Passwort einrichten lassen.
0

#9 Mitglied ist offline   Slayer 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.476
  • Beigetreten: 12. Dezember 03
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Baden-Württemberg
  • Interessen:&gt; Internet<br />&gt; Musik<br />&gt; Filme<br />&gt; Events

geschrieben 07. Juni 2005 - 14:40

Zitat (linksta: 07.06.2005, 15:38)

wenn ich mal fragen darf: was soll das genau werden? unter "web System" kann ich mir nix vorstellen
<{POST_SNAPBACK}>

Diesen Login brauche ich allgemein für Vieles...
Aber ich bin dabei ein CMS zu programmieren, das verstehe ich unter "Web System".

Dieser Beitrag wurde von Slayer bearbeitet: 07. Juni 2005 - 14:45

Der Mensch hat drei Wege, klug zu handeln.
Erstens durch Nachdenken: Das ist der Edelste.
Zweitens durch Nachahmen: Das ist der Leichteste.
Drittens durch Erfahrung: Das ist der Bitterste.

(Konfuzius)
0

Thema verteilen:


Seite 1 von 1

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