skript mit login
skript mit login
hallo.
wie bastel ich mir am besten ein login-skript in php?
folgendes problem: user loggt sich mit name und passwort ein... wenn das passwort richtig ist, soll eine seite kommen mit navi-verschiedenen möglichkeiten..
die einzelnen seiten sind schon fertig.. soll der user nun aber erst zu gesicht bekommen, wenn er erfolgreich eingeloggt ist...
wie realisiere ich so was am besten? session, cookie ... ?
thx
wie bastel ich mir am besten ein login-skript in php?
folgendes problem: user loggt sich mit name und passwort ein... wenn das passwort richtig ist, soll eine seite kommen mit navi-verschiedenen möglichkeiten..
die einzelnen seiten sind schon fertig.. soll der user nun aber erst zu gesicht bekommen, wenn er erfolgreich eingeloggt ist...
wie realisiere ich so was am besten? session, cookie ... ?
thx
- oxpus
- Administrator
- Beiträge: 28735
- Registriert: Mo 27.Jan, 2003 22:13
- Wohnort: Bad Wildungen
- Kontaktdaten:
Beides.wie realisiere ich so was am besten? session, cookie ... ?
Die beste Vorlage bietet das phpBB selber, also in der durchlaufenden Reihenfolge
common.php
sessions.php (Feststellung User ist angemeldet oder Gast)
login.php
sessions.php (Nach An-/Abmeldung Session neu erstellen)
Im groben:
Zunächst wird die IP des Users ausgelesen und ein vorhandenes Cookie.
Ist das Cookie nicht da, wird schonmal grundsätzlich eine neue Session mit der IP erstellt.
Der User, der sich dann darauf anmeldet, bekommt eine dauerhaft eindeutige Session-ID, mit der er angemeldet bleibt.
Diese ID ist auch im phpBB zu finden und die kriptishe Nummer nach sid= in den einzelnen Links.
(Erzeugt mittels md5(); und irgendwelchen Werten).
Diese Daten werden dann sowohl in der Datenbank als auch im Cookie des Users abgespeichert, um bei der nächsten Seite den User wieder identifizieren zu können.
Im phpBB fiele damit z. B. das erneute Anmelden weg.
Aber auch PHP selber kann Sessions verwalten.
Schau dazu mal hier rein:
SetCookie - Die Cookieschreibung unter PHP
Sessions in PHP
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
session und cookie hab ich so gesetzt:
und die abfrage ob beides vorhanden ist, schaut so aus:
aber irgendwas haut bei der cookie-prüfung nicht hin... ob cookie gesetzt ist oder nicht, ist wurscht.. warum das so ist... ¢¦
Code: Alles auswählen
//session setzen
$_SESSION["bce"] = $session_id;
$_SESSION["username"] = $_POST["user"];
//cookie setzen
setcookie("bcespieler", "ok", time()+3600); // verfällt in 1 StundeCode: Alles auswählen
if (isset($_SESSION["bce"]) && (isset($_COOKIE["bcespieler"]))) {
header("Location: main.php");
exit;
}hab nun mal ein wenig probiert... aber zu einem richtigen ergebniss bin ich nich wirklich gekommen...
mit setcookie("bcespieler", "ok", time()+3600); erzeuge ich das cookie...
oder sollte ich lieber setcookie("bcespieler", true, time()+3600); anwenden?
wird das cookie mit setcookie("bcespieler", "ok", -1); überhaupt sofort gelöscht?
weil ich mich ja zum testen ca. im minutentakt einlogge...
mit setcookie("bcespieler", "ok", time()+3600); erzeuge ich das cookie...
oder sollte ich lieber setcookie("bcespieler", true, time()+3600); anwenden?
wird das cookie mit setcookie("bcespieler", "ok", -1); überhaupt sofort gelöscht?
weil ich mich ja zum testen ca. im minutentakt einlogge...
- oxpus
- Administrator
- Beiträge: 28735
- Registriert: Mo 27.Jan, 2003 22:13
- Wohnort: Bad Wildungen
- Kontaktdaten:
Cookies ohne Zeitangabe werden gelöscht, wenn die Session abgelaugen ist oder der Browser geschlossen wird.
Also alles mit Zeit <= 0 wird so behandelt.
Also alles mit Zeit <= 0 wird so behandelt.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
ok.. funktioniert nu soweit..
habe es so realisiert:
1. index.php
2. login.php
3. main.php
es wird überprüft ob die session und das cookie vorhanden ist...
funktioniert soweit prima..
kann man was verbessern oder ist irgendwas doch nicht richtig sicher?
habe es so realisiert:
1. index.php
Code: Alles auswählen
//starten einer session
session_start();
if (!isset($_SESSION["ses"])) {
header("Location: login.php");
}
elseif ($_GET["action"] == "logout") {
session_destroy(); //session löschen
setcookie("spieler", false, -1); //cookie löschen
header("Location: login.php");
}
else {
header("Location: admin.php");
}Code: Alles auswählen
$session_id = session_id();
session_start();
...
wenn username und passwort stimmen, dann:
//session setzen
$_SESSION["ses"] = $session_id;
//cookie setzen
setcookie("spieler", true, time()+3600); // verfällt in 1 Stunde
header("Location: main.php");
...es wird überprüft ob die session und das cookie vorhanden ist...
Code: Alles auswählen
session_start();
if (!isset($_SESSION["ses"]) || (!isset($_COOKIE["spieler"]))) {
header("Location: login.php");
}
if ($_GET["action"] == "logout") {
session_destroy(); //session löschen
setcookie("spieler", false, -1); //cookie löschen
header("Location: login.php");
}
html-file erzeugen
kann man was verbessern oder ist irgendwas doch nicht richtig sicher?
- oxpus
- Administrator
- Beiträge: 28735
- Registriert: Mo 27.Jan, 2003 22:13
- Wohnort: Bad Wildungen
- Kontaktdaten:
Ist erstmal okay soweit.
Sofern Du keine Datenbank verwendest, um die IP nicht loggen, ist das nach meinem Dafürhalten erstmal okay.
Teste weiter, ob man hier nun diverse Einbruchsversuche starten kann, z. B. mit einem manuell geänderten Cookie...
Sofern Du keine Datenbank verwendest, um die IP nicht loggen, ist das nach meinem Dafürhalten erstmal okay.
Teste weiter, ob man hier nun diverse Einbruchsversuche starten kann, z. B. mit einem manuell geänderten Cookie...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
ok.. nutze nun auch zum einloggen die db..
wie kann ich die ip mitloggen und prüfen?
Code: Alles auswählen
if ((strlen($_POST['user']) > 0) && (strlen($_POST['userpass']) > 0)) {
include("../functions.php");
//Verbindung zur DB herstellen
connectSQL();
$sql = 'SELECT * FROM spieler_cfg WHERE name="' .$_POST['user']. '" and pw="' .md5($_POST['userpass']) . '"';
$result = @mysql_query($sql);
if (!$result) {
die('Ungültige Abfrage: ' . mysql_error());
}
//bei treffer zugang zum admin-bereich
elseif (mysql_num_rows($result) != 0) {
//session setzen
$_SESSION["sid"] = $session_id;
$_SESSION["username"] = $_POST["user"];
//cookie setzen
setcookie("spieler", true, time()+3600); // verfällt in 1 Stunde
header("Location: main.php");
}//if mysql
}//if strlen > 0- oxpus
- Administrator
- Beiträge: 28735
- Registriert: Mo 27.Jan, 2003 22:13
- Wohnort: Bad Wildungen
- Kontaktdaten:
Die User-ID steht in $HTTP_SERVER_VARS['REMOTE_ADDR'] zur Verfügung. Die ist (sofern nicht gefakt) eindeutig und kann auch im Cookie, bzw. zur Kontrolle in der Datenbank abgelegt werden.
Wenn sich dann ein User anmeldet, wäre diese IP auch prüfbar, allerdings darf man sich nicht darauf verlassen, denn die IP kann jederzeit wechseln.
Allerdings innerhalb der Session muss diese gleich sein, somit hat man wenigstens die Session sicher.
Ansonsten muss sich der User eben anmelden und die Daten müssen mit der DB übereinstimmen...
Wenn sich dann ein User anmeldet, wäre diese IP auch prüfbar, allerdings darf man sich nicht darauf verlassen, denn die IP kann jederzeit wechseln.
Allerdings innerhalb der Session muss diese gleich sein, somit hat man wenigstens die Session sicher.
Ansonsten muss sich der User eben anmelden und die Daten müssen mit der DB übereinstimmen...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
niemals vom Benutzer gesendete Daten (z.B. $_POST oder $_GET) direkt an ein SQL-Statement übergeben. Schon gar nicht an einer Stelle, an die jeder rankommt. In der functions.php von phpBB gibt es eine schöne Funktion dafür (phpbb_clean_username() oder so)
Der Standalone-CrackerTracker von cback sollte auch irgendwo drin sein, am Besten per require()
Der Standalone-CrackerTracker von cback sollte auch irgendwo drin sein, am Besten per require()
- oxpus
- Administrator
- Beiträge: 28735
- Registriert: Mo 27.Jan, 2003 22:13
- Wohnort: Bad Wildungen
- Kontaktdaten:
1. strlen = String Length = Länge der Zeichenkette
2. require = http://www.oxpus.de/viewtopic.php?t=5057
2. require = http://www.oxpus.de/viewtopic.php?t=5057
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
