Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Problem mit Login Wie geht es das man sich dauerhaft einloggen kann.

Frage Entwicklung PHP

Mitglied: Michi262

Michi262 (Level 1) - Jetzt verbinden

07.09.2008, aktualisiert 02.10.2008, 4799 Aufrufe, 13 Kommentare

Hi

wie ich oben schon geschrieben habe möchte ich das man sich auf einer Seite dauerhaft einloggen kann.

Ich weiß auch das ich dadurch die sessions mit dem cookie über eine DB verknüpfen muss aber wie das geht weiß ich nicht.

Wie es funktioniert das es nicht dauerhaft ist weiß ich mitlerweile.

Hab dann mal n bisschen gesucht und bin auf das gestoßen: http://tut.php-quake.net/login.html

Leider komm ich da nicht so richtug weiter.

Könnte mir wer von euch das erklären?

Wäre euch sehr dankbar

Michi262
Mitglied: filippg
07.09.2008 um 17:51 Uhr
Hallo,

letztlich ist es ganz einfach. Wenn sich jemand erfolgreich eingeloggt hast sendest du ihm ein Cookie in dem seine Nutzer-ID steht. Das Ablaufdatum des Cookies setzt du auf "Never".
Wenn ein Nutzer neu auf die Seite kommt fragst du ab, ob dieses Cookie bei ihm existiert und liest gegebenenfalls die Nutzer-ID aus. Wie du für die einzelnen Seiten die Authentifizierung bei dir machst (ich gehe mal davon aus über die SESSION-Variablen/Mechanismen von PHP oder?) weiß ich nicht, aber die Nutzer-ID musst du dann halt als "erfolgreich authentifiziert" anerkennen.

So zumindest das Grundprinzip. Es ergibt sich nur ein Sicherheitsproblem:
Wenn das Cookie nur die Nutzer-ID speichert (und die Nutzer-IDs kann man meist irgendwo herausbekommen) dann kann jemand das bei sich gespeicherte Cookie so manipulieren, dass er plötzlich als jemand anderes angemeldet ist. Das kann man verhindern, indem man noch einen anderen Wert mit dazuschreibt - beispielsweise eine weitere ID, die auf der Seite nirgends einzusehen ist, aber in der Datenbank bei den Nutzerdaten gespeichert wird. Soll nun jemand über sein Cookie authenitfiziert werden, dann wird auch diese zweite ID ausgelesen und mit dem Wert in der DB verglichen. Nur wenn die beiden übereinstimmen wird das Cookie anerkannt.

Daneben gibt es noch die üblichen Gefahren, z.b. 1. dass das Cookie gespeichert ist, jemand mit Zugriff auf den Rechner des Nutzers sich also als dieser anmelden kann oder das Cookie kopieren kann, dass 2. das Cookie bei der Übertragung abgehört werden kann, dass 3. Sessions geklaut werden können, wenn man die Session-ID abhören kann etc...

Gruß

Filipp
Bitte warten ..
Mitglied: Michi262
07.09.2008 um 18:15 Uhr
Hi

danke. Nach dem es aber doch so viele Gefahren gibt wollte ich mal fragen ob mir da wer ne sichere! anleitung schreiben kann. D.h. das es möglichst sicher ist. Weil ich weiß nicht ob ich das so sicher hinbekomme ^^

Michi26206
Bitte warten ..
Mitglied: Enclave
21.09.2008 um 14:54 Uhr
Also ich habe das so gemacht:

Ich habe 2 Tabellen: user und loginkeys

Wenn sich jetzt jemand einloggt generiere ich mir einen Key der aus dem MD5 Hash folgender Werte besteht:
- IP
- Aktuelle Zeit
- Username
- und 5 zufälligen Zahlen zwischen 1 und 1337
01.
$key = md5(ip.time().username.rand(1,1337).rand(1,1337).rand(1,1337).rand(1,1337).rand(1,1337));
Diesen Key schreibe ich mit der dazugehörigen Userid in die Tabelle login (man kann die beiden Tabellen natürlich auch zusammenfassen aber ich zieh mir die Sachen lieber was auseinander)

Diesen Key kann man nahezu unmöglich rekonstruieren. Diesen Key und die Userid speicher ich als Cookie auf dem Rechner.
Beim Besuch der Seite wird überprüft ob der Key stimmt und wenn er stimmt ist man halt eingeloggt...

Viele speichern die Userid sowie den MD5 Hash des Passworts in einem Cookie.
Wenn jetzt jemand an die Cookies kommt (wie auch immer) kann er versuchen das Passwort zu cracken.
Bei meiner Variante kann er sich zwar einloggen aber er kommt nicht an das Passwort dran und da bei mir das alte Passwort angegeben werden muss wenn man das PW ändern will kann er das PW nicht ändern.

Mann kann den Loginkey auch noch mit dem IP Range xx.xx.*.* kombinieren um zusätzliche Sicherheit zu bekommen...

Ich hoffe das war genug Anregung

Mfg

Enclave
Bitte warten ..
Mitglied: Michi262
22.09.2008 um 17:10 Uhr
Hi

danke fpr die antwort das mit dem Key und so ist bei mir net des Problem. Sondern wie ich Cookies speichere und auslese^^

Michi262
Bitte warten ..
Mitglied: Enclave
22.09.2008 um 17:46 Uhr
Ja speichern tust du die mit setcookie
01.
setcookie("pp_loginkey", $key, time()+(60*60*24*30)); 
02.
setcookie("pp_user", $user, time()+(60*60*24*30));
Einfach PHP manuel lesen...

Und dann zur Überprüfung:
01.
if (isset($_COOKIE['pp_loginkey']) && isset($_COOKIE['pp_user']))
und genauso ließt du die aus und dann musst du halt noch überprüfen ob der Key zum User gehört...

Mfg

Chaos
Bitte warten ..
Mitglied: Michi262
22.09.2008 um 17:53 Uhr
Hi

danke ich werds mal probieren thx.

Michi262
Bitte warten ..
Mitglied: Michi262
26.09.2008 um 16:39 Uhr
Hi

sry wegen doppel Post aber sonst liest es leider kaum wer.

Also ich hab alles so gemacht allerdings kommt jetzt ein Error und zwar:

01.
Warning: Cannot modify header information - headers already sent by (output started at C:\Programme\xampp\htdocs\mycms\checklogin.php:21) in C:\Programme\xampp\htdocs\mycms\checklogin.php on line 62 
02.
 
03.
Warning: Cannot modify header information - headers already sent by (output started at C:\Programme\xampp\htdocs\mycms\checklogin.php:21) in C:\Programme\xampp\htdocs\mycms\checklogin.php on line 63
in Zeile 62 und 63 hab ich das setcookie stehen. Hab ich etwas vergessen oder falsch gemacht?

Und noch was:

Die Werte aus dem Cookie bekomm ich so oder?

$_COOKIE['pp_loginkey'] bzw. $_COOKIE['pp_user']

Wie "zerstör" ich den Cookie wieder?

Danke shcon mal für die Hilfe
Michi262
Bitte warten ..
Mitglied: Enclave
26.09.2008 um 20:18 Uhr
Zitat von Michi262:
in Zeile 62 und 63 hab ich das setcookie stehen. Hab ich etwas
vergessen oder falsch gemacht?
Ja. Du darfst vor dem setzen keinen Output haben (keine Leerzeile und nichts anderes vor <?php).
Also kein echo oder so.
Zitat von Michi262:
Die Werte aus dem Cookie bekomm ich so oder?

$_COOKIE['pp_loginkey'] bzw. $_COOKIE['pp_user']
genau so
Zitat von Michi262:
Wie "zerstör" ich den Cookie wieder?
Wer das Cookie löschen will ruft einfach setcookie nur mit der Namensangabe des Cookies auf:

setcookie("adressliste_cookie");

Auf php.net wird empfohlen, es ohne Wertangaben (also nur "") und mit negativer Geltungsdauer aufzurufen, damit es auch sicher gelöscht wird. Das sieht dann so aus:

setcookie("adressliste_cookie","",time()-3600);
Quelle: PHP für dich


Mfg

Enclave
Bitte warten ..
Mitglied: Michi262
28.09.2008 um 17:54 Uhr
Hi

ok danke. Hättest du nen Tipp wie ich dann den Cokkie setzen soll? Ich muss ja zuvor noch alle eingeben Prüfen ob es auch der richtige User ist und ob er überhaupt eingeloggt bleiben will.

Michi262
Bitte warten ..
Mitglied: Enclave
28.09.2008 um 21:22 Uhr
Ich sagte doch RTFM...

Mfg

Enclave
Bitte warten ..
Mitglied: Michi262
29.09.2008 um 17:53 Uhr
Hi

ich hab das ding schon gelsen und jetz nochmal allerdings wer ich net schlau wie ich das machen soll das ich den Cokkie zu dem Zeitpunkt setze das kein Eingabefeld den blockiert. Könntest du mir nen Tipp geben?

Michi262
Bitte warten ..
Mitglied: Enclave
29.09.2008 um 18:06 Uhr
Du übergibst die Loginvariablen an eine andere Datei. Und die fängt dann zuallererst damit an:
01.
<?php 
02.
// übergebene Variablen werden geprüft und Cookies gesetzt 
03.
?> 
04.
Du bist eingeloggt 
05.
oder auch nicht
Mfg

Enclave
Bitte warten ..
Mitglied: Michi262
02.10.2008 um 20:54 Uhr
Hi,

bin endlich dazu gekommen. ;) Jetzt funktionierts danke.

Michi262
Bitte warten ..
Ähnliche Inhalte
Windows Server
Problem mit Webdav und Webserver IIS (3)

Frage von JUJUS31 zum Thema Windows Server ...

Netzwerkgrundlagen
Multi NAT Problem (9)

Frage von Gr33n93 zum Thema Netzwerkgrundlagen ...

Windows Server
gelöst Update BackupExec 2015 auf 2016 führt zu SQL-Server Problem (17)

Frage von montylein1981 zum Thema Windows Server ...

Neue Wissensbeiträge
Sicherheits-Tools

Sicherheitstest von Passwörtern für ganze DB-Tabellen

(1)

Tipp von gdconsult zum Thema Sicherheits-Tools ...

Peripheriegeräte

Was beachten bei der Wahl einer USV Anlage im Serverschrank

(9)

Tipp von zetboxit zum Thema Peripheriegeräte ...

Windows 10

Das Windows 10 Creators Update ist auf dem Weg

(6)

Anleitung von BassFishFox zum Thema Windows 10 ...

Heiß diskutierte Inhalte
Exchange Server
Exchange 2016 Standard Server 2012 R2 Hetzner Mail (36)

Frage von Datsspeed zum Thema Exchange Server ...

Verschlüsselung & Zertifikate
Mit Veracrypt eine zweite interne (non-system) Festplatte verschlüsseln (10)

Frage von Bernulf zum Thema Verschlüsselung & Zertifikate ...

Internet Domänen
Nameserver ein Geist? (7)

Frage von zelamedia zum Thema Internet Domänen ...

Microsoft Office
Übertrag in eine andere Tabelle (6)

Frage von charmeur zum Thema Microsoft Office ...