You are not logged in.

1

Monday, January 31st 2011, 11:15pm

Frage zu einem Loginsystem

Für meine Homepage möchte ich gerne ein Loginsystem schreiben, allerdings habe ich Schwierigkeiten, es nach meinen Vorstellungen zu konzipieren.
Ich möchte es so gestalten, dass eine Sitzung 30 Minuten dauert, der User sich aber aussuchen kann, ob er dauerhaft angemeldet bleiben möchte.
An sich wäre das ja kein großen Problem.
Der Benutzername sowie das Passwort werden überprüft. Wenn beides stimmt, wird eine Session erstellt.
Dauerhaft angemeldet sein würde ich mit einem Cookie machen.

Nun treten aber zwei Probleme auf:
1. Auf meinem Server hält eine Sitzung 1440 Sekunden, also keine kompletten 30 Minuten
2. Ich habe leider keine Ahnung, wie ich das mit dem Cookie lösen kann, es soll ja auch sicher sein

Kann mir jemand vielleicht bei beiden Problemen weiterhelfen?
Im WCF gibt es so etwas, nur kenne ich das genaue System davon nicht..

Fabo

Member

  • "Fabo" is male

Posts: 692

Location: Gladbeck

Occupation: Praktikant bei Xovi GmbH

  • Send private message

2

Tuesday, February 1st 2011, 12:18am

1. Eine Session wird immer nach session_start() ausgeführt wird. 1440 Sekunden ist ein in der php.ini definierter Wert d.h. dass du entweder bei jedem Aufruf der Seite(n) session_start ausführst, oder dass du die voreingestellte Zeit hochschraubst:

PHP Source code

1
ini_set('session.gc_maxlifetime'SEKUNDEN);


2. Entweder wird der Cookie falsch erstellt, oder falsch ausgelesen ;)

3

Tuesday, February 1st 2011, 12:43am

1. Muss ich das einmalig ausführen oder bei jedem Aufruf der Seite machen?

2. Erstellen und auslesen funktioniert.
Mein Bedenken ist nur die Sicherheit. Einige Personen können die Cookies ja manuell erstellen und somit fremde Daten erstellen.
Da einige nur eine temporäre IP haben bzw Nutzer des selben Routers die gleiche IP haben, möchte ich es auch nicht durch die IP überprüfen..

Ich bräuchte eine Lösung, sodass nur der User dauerhaft online angemeldet ist, welcher auch die Accountdaten eingegeben hat..

Fabo

Member

  • "Fabo" is male

Posts: 692

Location: Gladbeck

Occupation: Praktikant bei Xovi GmbH

  • Send private message

4

Tuesday, February 1st 2011, 8:08am

1. Wie ich (relativ unverständlich) schrieb, wird die session IMMER mit session_start() erneuert. ini_set sollte auch immer vorhanden sein, um die Sessionlänge zu erhöhen.

2. Wenn du das Passwort mit einem salted hash in den Cookie schreibst, bist du auf der sicheren Seite:

PHP Source code

1
2
3
4
5
6
7
<?
//...
$passwort = "12345";
$salt = "OtXczgIb":
$cookiepass = md5(md5($salt).md5($passwort).md5($salt));
//...
?>


Relativ paranoid, aber wirkungsvoll. Den Hash aus dem Cookie kannst du dann auf deiner Seite gegenprüfen und den User bei Bedarf ausloggen

PHP Source code

1
2
3
4
5
6
<?
//...
if($cookiecheck !== md5(md5($salt).md5($passwort).md5($salt))) {
//...
}
?>

Tr3kk3r

Member

  • "Tr3kk3r" is male

Posts: 5,549

Location: Ruhrpott

Occupation: Student

  • Send private message

5

Tuesday, February 1st 2011, 3:44pm

md5 wird als "broken" d.h. unsicher angesehen, aufgrund der vielen inzwischen bekannten Kollosionen. SHA-1 oder SHA-256 ist imho besser.
Best regards,
Sebastian Teumert

6

Tuesday, February 1st 2011, 9:37pm

Danke, für die Hilfe.

@Tr3kk3r: Ja, darüber habe ich auch schon etwas gelesen, benutze selber hauptsächlich einen double salted hash mit sha1

7

Sunday, February 13th 2011, 12:14am

Ich habe noch eine kurze Frage.
Welche Variante bei ini_set wäre richtig:

PHP Source code

1
2
3
ini_set('session.gc_maxlifetime'1800);

ini_set('session.gc_maxlifetime''1800');


Muss ich die Anzahl der Sekunden mit den Anführungszeichen ('') angeben oder ohne?

8

Sunday, February 13th 2011, 4:15am

Auf Grund der Tatsache, dass die 1800 eine Zahl ist, werden hier keine Anführungszeichen ('') benötigt.
Meine Beiträge sind nur Hilfestellungen und Anregungen zur Lösung von einem Problem.
Ein wenig Mitdenken ist dennoch erforderlich!

Im WCF werden Passwörter nicht verschlüsselt, sondern gehasht!
(Hash ist eine "Verschlüsselung", wo du den Schlüssel wegwirfst. ;))

Plunts

Member

  • "Plunts" is male

Posts: 5,925

Location: Ruhrpott

Occupation: Student

  • Send private message

9

Sunday, February 13th 2011, 12:30pm

Bei PHP ist das vollkommen egal, was du schreibst ^^ Korrekt wäre nach Definition übrigens mit Anführungszeichen, da die Funktion mit 2 String-Parametern definiert ist. Aber der Interpreter castet dir das eh hin und her wies ihm passt. Schreibs also wie du willst, ich persönlich schreibe Zahlen immer wie H3llGhost ohne Anführungszeichen.
Cacator cave malum! Aut si contempseris, habeas Jovem iratum!
Support und weitere Plugins von mir auf TechNex.org