Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Yada Mitglied
Angemeldet: 08.06.2004 Beiträge: 267
Interessen: zuviel
|
Verfasst am: 17.06.2005, 13:50 Titel:
Login-Script (sehr einfach) |
|
|
|
|
Hi,
da ich gerade die beiden letzten Tests des Jahres hinter mir habe, und diese erfolgreich bestanden habe, gibts aus Freude nen Tutorial ...
1. SQL Struktur
Code: | CREATE TABLE `user` (
`id` INT( 15 ) NOT NULL AUTO_INCREMENT ,
`name` VARCHAR( 60 ) NOT NULL ,
`password` VARCHAR( 60 ) NOT NULL ,
PRIMARY KEY ( `id` )
); |
2. login.php
Code: | <?php
session_start(); // Die Session wird gestartet
ob_start();
include('auth.php');
echo "<form action='".$_SERVER['PHP_SELF']."' method='POST'>";
echo "<input type='Text' name='log_nick'><br>"; // log feld für nick
echo "<input type='Password' name='log_pass'><br>"; // log feld für pw
echo "<input type='Submit' value=' einloggen '>";
echo "</form>";
?> |
3. auth.php
Code: | <?php
if(isset($_POST['log_nick']) && isset($_POST['log_pass'])) { // sollten log_nick und pass gegeben sein
$result = mysql_query("SELECT id,name,password FROM `user` WHERE `name` = '".$_POST['log_nick']."'"); // wird id, name und passwort aus der user tabelle geholt, wo der name der eingegebene log_nick ist
$row = mysql_fetch_array($result); // row dient der wiedergabe fürs resultat
if($_POST['password'] != $row['password']) { // sollte das passwort falsch sein ..
echo "Es ist ein Fehler aufgetretten!"; // <--
} else { // Andernfalls wird die session gesetzt!
$_SESSION['id'] = $row['id'];
$_SESSION['password'] = $row['pw'];
}
}
?> |
4. logout.php
Code: | <?php
session_start(); // Die Session wird gestartet
ob_start();
include('auth.php');
if(!isset($_SESSION['id']) && !isset($_SESSION['pw'])) { // sollte man gar net erst eingeloggt sein!...
echo "Du kannst dich nicht ausloggen, da du nicht eingeloggt bist!"; // <--
} else {
unset($_SESSION['id']); // session_id wird "entfernt"
unset($_SESSION['pw']); // session_pw wird "entfernt"
session_destroy(); // session wird "zerstört"
echo "Erfolgreich ausgeloggt!";
}
?> |
5. site.php
Code: | <?php
session_start(); // Die Session wird gestartet
ob_start();
include('auth.php');
if(!isset($_SESSION['id']) && !isset($_SESSION['pw'])) { // wenn man nit eingeloggt ist ...
echo "access denied"; // <--
} else {
echo "<a href='logout.php'> weg mit mir ! </a><br><br>";
echo "Hallo, du bist eingeloggt ... das script hat Yada geschrieben, bedanke Dich bei ihm das du das hier siehst :P"; // ^^
}
?> |
---
Noch nicht getestet!
Eben aus Spaß im Dreamweaver geschrieben ^^ ...
Kurze Erklärung:
login.php: Die Datei die benötigt wird um sich einzuloggen.
auth.php: Die Datei die einen einloggt
logout.php: Die Datei die einen ausloggt
site.php: Erst wenn man eingeloggt ist, kann man diese Seite sehen!
HF, Yada |
|
Nach oben |
|
|
flexx Mitglied
Angemeldet: 19.02.2005 Beiträge: 54
|
Verfasst am: 17.06.2005, 13:53 Titel:
|
|
|
|
|
edit sry nur den anfang gelesen. sorry ^^
Zuletzt bearbeitet von flexx am 17.06.2005, 14:44, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
Yada Mitglied
Angemeldet: 08.06.2004 Beiträge: 267
Interessen: zuviel
|
Verfasst am: 17.06.2005, 14:11 Titel:
|
|
|
|
|
Code durchgehen ... Thx @ Kommentare //
e/ zuerst denken, dann lesen, dann posten ^^
Zuletzt bearbeitet von Yada am 17.06.2005, 14:56, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
unex`9dots Administrator
Angemeldet: 02.08.2003 Beiträge: 1106 Wohnort: Karlsruhe Interessen: Coding, Segeln, Schwimmen, PC
|
Verfasst am: 17.06.2005, 14:30 Titel:
|
|
|
|
|
sieht ganz brauchbar aus, sehr schön!
vor dem löschen der session mit session_destroy() würde ich empfehlen die variablen nicht einzeln mit unset() zu löschen, sondern mit unset($_SESSION); einfach ALLE session variablen zu löschen, das sit generell etwas sauberer.
Für alle die an dieser Stellt etwas mehr über Logins lesen wollen nochmal der hinweis auf einen anderen thread http://forum.9dots.de/viewtopic.php?t=409 |
|
Nach oben |
|
|
Yada Mitglied
Angemeldet: 08.06.2004 Beiträge: 267
Interessen: zuviel
|
Verfasst am: 17.06.2005, 14:55 Titel:
|
|
|
|
|
So, wusst ich gar nich, ich lösch die immer einzeln
Danke! |
|
Nach oben |
|
|
Thomas`tiweb Mitglied
Angemeldet: 03.08.2004 Beiträge: 115 Wohnort: Bruchsal
|
Verfasst am: 18.06.2005, 03:34 Titel:
|
|
|
|
|
Ich als Noob komm hier auch mal daher und stell die ganz einfache Frage: Wieso die Session Vars bzw. das Session Array loeschen?
Mit session_destroy() verabschiedet sich das doch sowieso oder ?
Gibts hier eigentlich schon nen Tut wo der Session Save Handler beschrieben ist? Vielleicht setzt ich mich mal da dran
Ist nuetzlich die Sessions z.b. in der DB zu haben.
Edit:
Thomas`tiweb hat folgendes geschrieben: |
Mit session_destroy() verabschiedet sich das doch sowieso oder ?
|
Ehh, nein - es wird doch nicht geloescht. Habe ich irrtuemlicherweise angenommen, weil ich immer meine eigenen Save Handlers benutze, da passiert sowas erst garnicht
Test:
Code: |
<?
session_start();
$_SESSION['bla'] = "moep";
print($_SESSION['bla']);
//Erst durch den unset wirds geloescht
//unset($_SESSION);
session_destroy();
print($_SESSION['bla']);
//Gibt "moepmoep" aus
?>
|
Edit 2:
Zu dem Login: Umbedingt immer die IP des Remote PCs als Session Variable speichern und sie beim Einloggen abfragen -> falls keine Uebereinstimmung Session loeschen.
So wird verhindert, dass sich User durch Weitergabe der Session-ID als andere Accounts anmelden koennen (es gibt genuegend Leute die Session-IDs in Links mitposten). |
|
Nach oben |
|
|
unex`9dots Administrator
Angemeldet: 02.08.2003 Beiträge: 1106 Wohnort: Karlsruhe Interessen: Coding, Segeln, Schwimmen, PC
|
Verfasst am: 18.06.2005, 04:23 Titel:
|
|
|
|
|
das mit dem überprüfen der IP hat einen großen Haken. Es funktioniert nämlich nicht immer wie gewünscht. AOL-User z.B. kriegen andauernd eine neue IP zugewiesen, warum genau weiss ich nicht... in vielen Firmen selbiges.... muss irgendwie mit den proxys zusammenhaengen ueber die die laufen.
Die Kontrolle der IP ist also eher eine schlechte idee. Meines wissens kann man höchstens die ersten 6 stellen der ip benutzen bzw. bis zum 2ten Punkt eben.
Alternativ kann man eben noch den Browser als Sicherheitskriterium hinzunehmen, wobei da eben durch die weite Verbreitung des IE kaum ein merkbarer Effekt rauskommen wird.
Wie Thomas schon sagt ist der session_set_save_handler() eine sehr empfehlenswerte funktion, mehr dazu findet ihr in dem Thread den ich in meinem letzten Post angegeben habe.
Wenn ich in den nächsten Tagen mal Zeit habe werde ich vielleicht mal eine fertige Klasse mit ins Forum stellen. |
|
Nach oben |
|
|
Yada Mitglied
Angemeldet: 08.06.2004 Beiträge: 267
Interessen: zuviel
|
Verfasst am: 18.06.2005, 08:33 Titel:
|
|
|
|
|
Ja, unex hat recht mit mit seiner IP-These.
Es bringt sich nicht sehr viel, da einige User immer neue IP`s kriegen...
Man könnte es schon machen, nur das posten der SESSID in ner URL kann der Admin nicht verantworten...
regards, me |
|
Nach oben |
|
|
unex`9dots Administrator
Angemeldet: 02.08.2003 Beiträge: 1106 Wohnort: Karlsruhe Interessen: Coding, Segeln, Schwimmen, PC
|
Verfasst am: 18.06.2005, 09:13 Titel:
|
|
|
|
|
yada: entweder du verantwortest das poster der session id oder du sperrst lle aus, die keine cookies aktiviert haben. Ob du das willst hängt dann wohl von dir und der Seite die du baust ab. |
|
Nach oben |
|
|
Yada Mitglied
Angemeldet: 08.06.2004 Beiträge: 267
Interessen: zuviel
|
Verfasst am: 18.06.2005, 14:05 Titel:
|
|
|
|
|
Dann schreib ich nen Verweis man solls nich tun, reicht doch auch, oder? |
|
Nach oben |
|
|
Thomas`tiweb Mitglied
Angemeldet: 03.08.2004 Beiträge: 115 Wohnort: Bruchsal
|
Verfasst am: 18.06.2005, 14:20 Titel:
|
|
|
|
|
also wir fragen die ip immer ab und ich habe noch keine negativen laute bekommen (von wegen ich kann mich nicht einloggen). wenn user damit probleme haben muessen sie halt cookies aktivieren (und der login laeuft dann halt immer ueber cookies, es wird also bei jedem seitenaufruf ne neue session generiert).
ich sperre lieber 5 user aus als 20000 user zu sagen, dass sie lieber nicht die session-id mitposten sollen (und das geschieht manchmal schnell).
bei normalen usern ist das eigentlich kein problem, aber was ist mit den admins?
es ist definitiv ne riesen sicherheitsluecke!
btw: stimmt das mit den ips bei aol? das kann ich mir schwer vorstellen ... wie soll man sonst egal was ueber tcp/ip machen? das wuerde nur gehen wenn man keinen dauernden zugriff auf die ressource hat (z.b. websites aufrufen) jedoch nie bei anderen sachen (ftp, spiele, ssh, etc.).
btw2: ich wuerde mal behaupten, dass nur 5% aller user wissen, was eine sessionid ist und was sie anrichten kann. es gab einen fall, da hat jemand eine sessionid von der wow registrierung ins forum gepostet - ist echt nichts feines! was soll man dem user sagen? selber schuld ? |
|
Nach oben |
|
|
unex`9dots Administrator
Angemeldet: 02.08.2003 Beiträge: 1106 Wohnort: Karlsruhe Interessen: Coding, Segeln, Schwimmen, PC
|
Verfasst am: 18.06.2005, 14:44 Titel:
|
|
|
|
|
richtig das mit den Sessions sind ohne cookie definitiv sehr sehr sehr unsicher... mit cookies wird es deutlich besser, auch wenn es da natuerlich auch mittel und wege gibt es zu umgehen.
Zu dem Thema kann ich euch folgendes empfehlen:
http://www.sans.org/rr/whitepapers/webservers/1594.php
auf seiten 13/14(je nach Zählung der seiten ) 2ter Absatz von unten behandelt die Sache mit den IPs auf die ich mich beziehe. Kann natuerlich schon sein das es nichtmehr 100% aktuell ist...
wobei 10.Januar 2005 schon relativ aktuell klingt |
|
Nach oben |
|
|
DMC Mitglied
Angemeldet: 05.06.2004 Beiträge: 180
|
Verfasst am: 19.06.2005, 18:20 Titel:
|
|
|
|
|
ich habe sunrise (CH) adsl, da wird einem nach jedem verbinden ins internet, eine neue ip zugewiesen. zudem kann man bei sunrise eine ip nicht länger als 24 stunden haben, da nach 24 stunden die verbindung automatisch getrennt wird. |
|
Nach oben |
|
|
xaan Mitglied
Angemeldet: 19.04.2005 Beiträge: 370 Wohnort: Bayern Interessen: C#, C++, PHP, Security
|
Verfasst am: 19.06.2005, 21:18 Titel:
|
|
|
|
|
das haben standart breitband verbindungen so ansich...
anderfalls kostet sowas seh viel |
|
Nach oben |
|
|
Thomas`tiweb Mitglied
Angemeldet: 03.08.2004 Beiträge: 115 Wohnort: Bruchsal
|
Verfasst am: 19.06.2005, 22:48 Titel:
|
|
|
|
|
das dokument ist sehr schoen @unex, aber da steht auch, dass man es wirklich ueberpruefen sollte
wie gesagt, meist laeuft alles noch ueber einen cookie login (also ich meine jetzt nicht den session cookie) und deswegen passt das meist alles (auch mit der ueberpruefung)
falls man nur die (wie im dokument steht) ersten 10 bits ueberprueft (da die bei aol anscheinend immer gleich ist), kann ein angreifer mit derselben sessionid es gleich nochmal probieren (mit einer x-beliebigen aol ip) - und es wuerde funktionieren.
die anderen sicherheitssachen, wie z.b. eine random-id (somit nicht vorhersehbar - bitte nicht time() fuer random-werte benutzen ), genug zeichen, loeschen nach x minuten inaktivsein, etc... sind bei den meisten php skripten schon standard (es wird zumindest in 50% aller tuts erwaehnt).
@DMC: Es ging nicht um die dynamische IP Zuweisung nach einem reconnect bzw. der 24h Zwangstrennung (womit auch eine neue ip generiert wird). |
|
Nach oben |
|
|
|