php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack (1) Themen-Optionen Bewertung: Bewertung: 1 Stimmen, 5,00 durchschnittlich.
  1 links from elsewhere to this Post. Click to view. #106 (permalink)  
Alt 19-08-2003, 23:31
KTJ
 Junior Member
Links : Onlinestatus : KTJ ist offline
Registriert seit: Jul 2002
Beiträge: 105
KTJ ist zur Zeit noch ein unbeschriebenes Blatt
Standard Login-System/Security

Hallo,
ich hatte ein Login-System benötigt, daher stiess ich hier zunächst auf das Login-Tutorial von mrhappiness. Daran gefiel es mir aber nicht, das durch die Sessions nach einem schliessen der Seite man beim nächsten Öffnen automatisch als ausgeloggt gilt. Daher wollte ich das ganze auf Cookies umbaun, was ich auch ohne Probleme geschafft habe, nur wollte ich kurz wissen, ob es auch von der Security richtig ist, wie ich es gemacht habe, da ich ungern irgendwelche Sicherheitslücken im Login-System haben möchte.
Also hier der Auszug der Funktionen:

PHP-Code:
//$db_zugriff aufgrund der MySQL-Klasse globalisiert
/*
Das im Formular angegebene Passwort wird bereits mit md5 verschlüsselt an die Funktion übergeben - liegt natürlich in selber Form in der Datenbank vor...
*/
function check_user($name,$pass){ 
global 
$db_zugriff;
$result $db_zugriff->query_first("SELECT userpasswort FROM users WHERE usernick = '".$name."'");
if(
$pass == $result[0]) return '1';
else return 
'0';


/*
Cookies mit usernick und verschlüsseltem Passwort werden gesetzt, auf die Dauer von einem Jahr - sollte reichen
*/
function login($usernick,$userpass){ 
setcookie("dba_usernick""$usernick"time()+(3600*24*365));
setcookie("dba_userpass""$userpass"time()+(3600*24*365));


/*
Es wird überprüft, ob die Cookies gesetzt sind - falls ja ob die Daten auch stimmen...
*/
function logged_in(){ 
if(isset(
$_COOKIE['dba_usernick']) && isset($_COOKIE['dba_userpass'])){
if(
check_user($_COOKIE['dba_usernick'],$_COOKIE['dba_userpass']) == "1") return '1';
else return 
'0';
}else return 
'0';


/*
Die Cookies werden durch den Logout wieder zurückgesetzt...
*/
function logout(){ 
setcookie("dba_usernick");
setcookie("dba_userpass");


/*
Falls ein User eingeloggt ist wird die $username mit seinem Nick definiert, ansonsten ist sie leer - der User ein Gast
*/
if(logged_in() == "1"){
$username $_COOKIE['dba_usernick'];
}else 
$username ""
Also das waren die zentralen Funktionen...könnte es da irgendwelche Probleme mit der Security geben oder kann ich das System guten Gewissens für meine HP benutzen?
Mit Zitat antworten
  #107 (permalink)  
Alt 19-08-2003, 23:34
KTJ
 Junior Member
Links : Onlinestatus : KTJ ist offline
Registriert seit: Jul 2002
Beiträge: 105
KTJ ist zur Zeit noch ein unbeschriebenes Blatt
Standard

OK, kein Problem. Hab es auch auf Cookies basierend geschafft, nur will ich nochmal auf Nummer sicher gehen, ob es von der Security auch sicher ist, daher hab ich dazu nochmal einen Thread eröffnet [hier]
Mit Zitat antworten
  #108 (permalink)  
Alt 20-08-2003, 00:45
Abraxax
  THE REAL HAXE (Administrator)
Links : Onlinestatus : Abraxax ist offline
Registriert seit: Jul 2002
Ort: neuss.nrw.de
Beiträge: 22.623
Abraxax befindet sich auf einem aufstrebenden Ast
Standard

ich führe mal zusammen, weil es ja doch zu diesem thema hier hergehört.
ausserdem kann happy so auch schneller sehen, dass du was gepostest hast.

*ZUSAMMENFÜHR*
__________________
INFO: Erst suchen, dann posten! | MANUAL(s): PHP | MySQL | HTML/JS/CSS | NICE: GNOME Do | TESTS: Gästebuch | IM: Jabber.org |


Mit Zitat antworten
  #109 (permalink)  
Alt 20-08-2003, 18:10
KTJ
 Junior Member
Links : Onlinestatus : KTJ ist offline
Registriert seit: Jul 2002
Beiträge: 105
KTJ ist zur Zeit noch ein unbeschriebenes Blatt
Standard

OK, kein Problem, ich dachte nur das ich ein neues eröffnen sollte, weil das Script ja auf Sessions basiert und nicht auf Cookies und weil mrhappiness sagte, das ich Fragen zu Cookies nicht hier posten sollte, aber nungut. Das wichtigste ist, dass ich eine Antwort bekomme, weil mir die Security natürlich sehr wichtig ist. So far...
Mit Zitat antworten
  #110 (permalink)  
Alt 20-08-2003, 21:25
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

ich dachte eigentlich, dass du die cookies zusätzlich einbaust und nicht gänzlich auf sessions verzichtest...
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #111 (permalink)  
Alt 20-08-2003, 21:45
KTJ
 Junior Member
Links : Onlinestatus : KTJ ist offline
Registriert seit: Jul 2002
Beiträge: 105
KTJ ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zu welchem Zweck wären denn Sessions dann noch nützlich?
Mit Zitat antworten
  #112 (permalink)  
Alt 20-08-2003, 21:56
Abraxax
  THE REAL HAXE (Administrator)
Links : Onlinestatus : Abraxax ist offline
Registriert seit: Jul 2002
Ort: neuss.nrw.de
Beiträge: 22.623
Abraxax befindet sich auf einem aufstrebenden Ast
Standard

damit du 1. die wahl hast zu wechseln und 2. und das cookie nur dann zu nutzen, um den user auf dauer zu identifizieren.

die session sollte weiterhin genutzt werden, um die daten bei user-aktionen auf der seite selbst zu speichern.

im cookie sollten nur daten enthalten sein, um den user später wieder automatisch anzumelden. mehr nicht.
__________________
INFO: Erst suchen, dann posten! | MANUAL(s): PHP | MySQL | HTML/JS/CSS | NICE: GNOME Do | TESTS: Gästebuch | IM: Jabber.org |


Mit Zitat antworten
  #113 (permalink)  
Alt 20-08-2003, 22:57
KTJ
 Junior Member
Links : Onlinestatus : KTJ ist offline
Registriert seit: Jul 2002
Beiträge: 105
KTJ ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Achso, dann werd ich die Sessions wohl auch wieder zusätzlich noch einbaun, auch wenn ich nicht ganz verstehe, was du mit "damit du die Wahl hast zu wechseln" meinst...
Achja, nur zur mal so: Wenn ich die Sessions wieder einbaue, dann ist das einzige was ich ändern muss wieder der session_start() am Anfang, beim Login das updaten der User-Table mit usersession=session_id() und beim Logout das updaten der Session auf den Standart-Wert (NULL), richtig?

Geändert von KTJ (20-08-2003 um 23:08 Uhr)
Mit Zitat antworten
  #114 (permalink)  
Alt 21-08-2003, 08:15
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

beim prüfen ob er eingeloggt ist,musst du erst nach ner gültigen session suchen und wenn du die nicht findest suchst du nach nem evtl. vorhandenen cookie mit logindaten

hat u. a. den vorteil, dass du nicht zwingend auf cookies angewiesen bist und so niemanden ausschließt. wer will kann natürlich trotzdem einen keks haben
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #115 (permalink)  
Alt 21-08-2003, 18:12
KTJ
 Junior Member
Links : Onlinestatus : KTJ ist offline
Registriert seit: Jul 2002
Beiträge: 105
KTJ ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Achso, hat zwar lange gedauert, aber langsam verstehe ich den Sinn der Sessions nun doch

Also gut, wie steht es darum:

PHP-Code:
function check_user($name,$pass){ 
global 
$db_zugriff;
$result $db_zugriff->query_first("SELECT userpasswort FROM users WHERE usernick = '".$name."'");
if(
$pass == $result[0]) return '1';
else return 
'0';


function 
login($usernick,$userpass){ 
global 
$db_zugriff;
setcookie("dba_usernick""$usernick"time()+(3600*24*365));
setcookie("dba_userpass""$userpass"time()+(3600*24*365));
$db_zugriff->query("UPDATE users SET usersession='".session_id()."' WHERE usernick = '".$usernick."'"); 


function 
logged_in(){ 
global 
$db_zugriff;
$result $db_zugriff->query("SELECT usernick FROM users WHERE usersession = '".session_id()."' LIMIT 1");
$found mysql_num_rows($result);
if(
$found == "0"){
if(isset(
$_COOKIE['dba_usernick']) && isset($_COOKIE['dba_userpass'])){
if(
check_user($_COOKIE['dba_usernick'],$_COOKIE['dba_userpass']) == "1") return '1';
else return 
'0';
}else return 
'0';
}elseif(
$found == "1") return '1';


function 
logout(){ 
global 
$db_zugriff;
setcookie("dba_usernick");
setcookie("dba_userpass");
$db_zugriff->query("UPDATE users SET usersession=NULL WHERE usersession = '".session_id()."'");


if(
logged_in() == "1"){ 
$username $_COOKIE['dba_usernick'];
$result $db_zugriff->query_first("SELECT usergroup FROM users WHERE usernick = '".$username."'");
$usergroup $result[0];
}else 
$username ""
Ist die Session/Cookie Combo so gut?

Nebenbei: Mir ist aufgefallen, dass beim Login beim Usernamen nicht auf Groß- und Kleinschreibung geachtet wird. Soll heissen: Wenn ich mich unter 'KTJ' anmelde, der Name auch so in der Datenbank gespeichert wird, dann kann ich mich trotzdem unter 'kTj' und Passwort, 'ktJ' und Passwort usw. einloggen...beim Passwort allerdings ist dies nicht der Fall. Das liegt denke ich daran, dass es mit md5() verschlüsselt ist und die Verschlüsslung auf Groß- und Kleinschreibung eingeht. Nur möchte ich nicht den Usernamen auch erst verschlüsseln, da es dazu keine weitere Bewandnis gibt. Also gibt es auch eine andere Möglichkeit?
Mit Zitat antworten
  #116 (permalink)  
Alt 21-08-2003, 21:20
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

sieht auf den ersten blick nich schlecht aus *g*

wie prüfst du die login-daten beim ersten einloggen, die kommen ja von nem formular oder?

was großKLEINschreibung angeht: SELECT BINARY username könnte helfen (beim abprüfen in der where-bedingung auch)
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #117 (permalink)  
Alt 21-08-2003, 23:09
KTJ
 Junior Member
Links : Onlinestatus : KTJ ist offline
Registriert seit: Jul 2002
Beiträge: 105
KTJ ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Gut, ich hoffe das ich alles relevante für Sessions und Cookies drinn habe, aber gehen tut es auf jeden Fall schonmal einwandfrei...
Wegen dem ersten Einloggen: Ich hab es so gemacht, dass auf der Seite dann in der Navigation entweder eine Login-Box erscheint wenn man nicht eingeloggt ist oder eben ein Link zum Ausloggen usw. wenn man eingeloggt ist. Bei der Login-Box wird natürlich alles über ein Formular geschickt. Und zu Beginn der Anmeldung werde ich es vorraussichtlich so einbaun, das man sich nicht selbst ein Passwort "aussuchen" kann, sondern ein zufällig generiertes an die bei der Registrierung angegebene Mail-Adresse bekommt...so kann man zumindestens sicher gehen, dass die Mail-Adresse gültig ist und das Passwort kann man dann natürlich später nach belieben ändern.
Das mit dem SELECT BINARY werde ich dann morgen mal ausprobieren, Rückantwort folgt dann.
Mit Zitat antworten
  #118 (permalink)  
Alt 21-08-2003, 23:26
mrhappiness
 PHP Guru
Links : Onlinestatus : mrhappiness ist offline
Registriert seit: Oct 2002
Beiträge: 14.890
mrhappiness ist zur Zeit noch ein unbeschriebenes Blatt
mrhappiness eine Nachricht über AIM schicken mrhappiness eine Nachricht über Yahoo! schicken
Standard

wenn du da aber auch check_user nimmst um die eingaben zu prüfen, müsste der benutzer dann nicht die md5-verschlüsselung seines passworts angeben?
__________________
Ich denke, also bin ich. - Einige sind trotzdem...
Mit Zitat antworten
  #119 (permalink)  
Alt 22-08-2003, 17:55
KTJ
 Junior Member
Links : Onlinestatus : KTJ ist offline
Registriert seit: Jul 2002
Beiträge: 105
KTJ ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Also erstmal wegen dem BINARY. Hat wunderbar geklappt...ich habe bei der check_user()-Funktion einfach das
WHERE usernick = '".$name."'"
durch
WHERE BINARY usernick = '".$name."'"
ersetzt, und jetzt klappt es mit der Groß- und Kleinschreibung beim Login.
Ich bin mir nur nicht sicher, ob es bei den anderen Funktionen auch eine Relevanz hat, das BINARY zu ergänzen. Bei der login()-Funktion zumindestens wahrscheinlich schon, bei der logged_in()-Funktion bin ich mir noch nicht ganz sicher und bei der logout()-Funktion braucht man es wohl nicht.

Wegen der check_user()-Funktion: Nein, der User kann sein unverschlüsseltes Passwort eingeben, da das Passwort im Cookie bereits verschlüsselt vorliegt und beim Login wird das eingegebene Passwort zunächst verschlüsselt und dann erst an die check_user()-Funktion übergeben...
Mit Zitat antworten
Antwort

Lesezeichen


LinkBacks (?)
LinkBack to this Thread: https://www.php-resource.de/forum/php-developer-forum/23724-problem-mit-login-mit-hilfe-von-php-und-mysql.html
Erstellt von For Type Datum
Jquery Mit Anderen Galerien Benutzen | jQuery Gallery This thread Refback 28-09-2012 11:17

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

PHP Marktplatz-Software
PHP Marktplatz-SoftwareEs hat sich viel getan! Die neue Version 7.5.9 unserer PHP Marktplatz-Software ebiz-trader steht ab sofort zur Verfügung.

28.10.2019 | Berni

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni


 

Aktuelle PHP Scripte

jqPlot jQuery Plotting Plugin ansehen jqPlot jQuery Plotting Plugin

jqPlot ist ein plotting und charting plugin für das jQuery Javascript framework

06.11.2019 Berni | Kategorie: AJAX/ Framework
WYSIWYG Editor

WYSIWYG Editor zum Einbinden in PHP Scripte.

21.10.2019 Stephan_1972 | Kategorie: PHP/ WYSIWYG
Modelmanager

Der Modelmanager ist ein Webtool für Fotografen, kann als komplette Homepage oder als Webtool installiert werden.

10.10.2019 Stephan_1972 | Kategorie: PHP/ Bilder
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 23:24 Uhr.