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 Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 17-09-2007, 22:33
Alpenmerlin
 Registrierter Benutzer
Links : Onlinestatus : Alpenmerlin ist offline
Registriert seit: Feb 2004
Beiträge: 22
Alpenmerlin ist zur Zeit noch ein unbeschriebenes Blatt
Standard Login mit Sessions

Hallo zusammen,

ich beschäftige mich erst seit heute Morgen mit dem Thema Login mit Hilfe von Cookies und Sessions usw. Habe es aber geschafft ne rudimentäre Userverwaltung aufzubauen die mit PHP, MySQL und Sessions arbeitet.

Nun würde mich interessieren ob ihr den Schutz für ausreichend haltet. Später sollen über die Datenbank Daten wie eMail-Adressen usw. gespeichert werden. Es wäre also ganz gut, wenn man nicht ohne weiteres auf die Daten zugreifen kann.

Das hier ist mein Code:
PHP-Code:
<?
function logged_in() {
    
$sql "SELECT UserID FROM users WHERE UserSession='".session_id()."' LIMIT 1";
    
$query mysql_query($sql);
    if (
mysql_num_rows($query) == 1)
        return 
true;
    else
        return 
false;
}

function 
check_pwd($userName$userPass) {
    
$sql "SELECT UserID AS UserID FROM users WHERE UserName='".$userName."' AND UserPass=MD5('".$userPass."') LIMIT 1;";
    
$query mysql_query($sql);
    if (
mysql_num_rows($query) == 1) {
        
$user mysql_fetch_array($query);
        return 
$user['UserID'];
    }
    else
        return 
false;
}

function 
update_session($userId) {
    
$sql "UPDATE users SET UserSession='".session_id()."' WHERE UserID=".$userId;
    
$query mysql_query($sql);
    if (
mysql_affected_rows() == 1){
        return 
true;
    }
    else {
        return 
false;
    }
}

function 
logout() {
    
$sql "UPDATE users SET UserSession = NULL WHERE UserSession='".session_id()."'";
    
$query mysql_query($sql);
    if (
mysql_affected_rows() == 1)
        return 
true;
    else
        return 
false;
}



session_name("sessionid");    
session_start(); 
require_once(
"connectdb.php");
connectdb("test");
if (isset(
$_POST['sent'])) { 
    
$_POST['sent']=0;
    
$userid check_pwd($_POST['userName'], $_POST['userPass']); 
    if (
$userid) {
        
update_session($userid);
    }
    else {
        echo 
"LogIn fehlgeschlagen!";
        
session_destroy();
    }

    
if (!
logged_in()) 
    echo 
'    <form method="post" action="'.$_SERVER["PHP_SELF"].'"> 
            <label>User: &nbsp;</label><input name="userName" type="text"><br> 
            <label>PWD: </label><input name="userPass" type="password"><br> 
            <input type="submit" value="Eintragen">
            <input type="reset">
            <input type="hidden" name="sent" value="1">
            </form>'

else 
    echo 
'<a href="logout.php">Ausloggen</a>'
?>
Wie man sieht, überprüfe ich die Anmeldung mit Hilfe der SessionID. Die Frage ist nur, wie sicher diese Art der Anmeldung ist. Denn die SessionID bleibt ja in der MySQL Tabelle stehen. Wenn es nicht sicher genug ist, stellt sie die Frage, wie man das verbessern kann.

Der Aufbau der MySQL Tabelle ist wie folgt:
PHP-Code:
UserID      int(11)         PRI    NULL    auto_increment
UserName    varchar
(30)         UNI          
UserPass    varchar
(32)                    
UserSession varchar(32)    YES         NULL     
UserMail    varchar
(150)         UNI 
Ich hoffe ihr könnt damit etwas anfangen und mir evtl. auch helfen. Danke schonmal für die Hilfe!

Gruß Alpenmerlin
Mit Zitat antworten
  #2 (permalink)  
Alt 17-09-2007, 22:40
Slava
 PHP Senior
Links : Onlinestatus : Slava ist offline
Registriert seit: Nov 2002
Ort: Köln->Karlsruhe
Beiträge: 1.589
Slava befindet sich auf einem aufstrebenden Ast
Standard

mysql_real_escape_string benutzen
__________________
Slava
bituniverse.com
Mit Zitat antworten
  #3 (permalink)  
Alt 17-09-2007, 23:10
Alpenmerlin
 Registrierter Benutzer
Links : Onlinestatus : Alpenmerlin ist offline
Registriert seit: Feb 2004
Beiträge: 22
Alpenmerlin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wie gesagt, ich bin Anfänger. Daher ist deine Antwort vielleicht einen Tick zu kurz!

Habe es trotzdem mal versucht auf das Script anzuwenden:
PHP-Code:
//$sql = "SELECT UserID FROM users WHERE UserName='".$userName."' AND UserPass=MD5('".$userPass."') LIMIT 1;";

    
$sql sprintf("SELECT UserID FROM users WHERE UserName='%s' AND UserPass=MD5('%s') LIMIT 1;",
            
mysql_real_escape_string($userName),
            
mysql_real_escape_string($userPass)); 
Ist die Sache damit schon gegessen oder muss man noch mehr daran ändern?

Und wie sieht es mit dem Erraten der MD5-Prüfsumme aus? Ist es zu unsicher diese in der Datenbank zu speichern? Schließlich könnte man ja reintheoretisch durch ausprobieren auf die Nummer kommen und ist dann eingelogt! Halte es zwar für höchst unwahrscheinlich, würde aber gerne mal die Meinung von erfahrerenen Usern wissen...
Mit Zitat antworten
  #4 (permalink)  
Alt 17-09-2007, 23:31
deathcakeman
 Registrierter Benutzer
Links : Onlinestatus : deathcakeman ist offline
Registriert seit: Aug 2006
Beiträge: 134
deathcakeman ist zur Zeit noch ein unbeschriebenes Blatt
Standard

http://de.wikipedia.org/wiki/Md5#Sic....BCberlegungen
__________________
*blubb*
Mit Zitat antworten
  #5 (permalink)  
Alt 18-09-2007, 00:25
ministry
 PHP Junior
Links : Onlinestatus : ministry ist offline
Registriert seit: Jun 2006
Ort: KI / KA
Beiträge: 965
ministry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

MD5 ist dafür völlig ok.

Außerdem gibt man am Login ja nicht den Hash sondern das Passwort ein, also müsste man sowieso das Passwort im Klartext erraten... Und das ist wohl noch einfacher.
__________________
ich glaube
Mit Zitat antworten
  #6 (permalink)  
Alt 18-09-2007, 00:41
Alpenmerlin
 Registrierter Benutzer
Links : Onlinestatus : Alpenmerlin ist offline
Registriert seit: Feb 2004
Beiträge: 22
Alpenmerlin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hatte es mir bei Wiki schon durchgelesen. Aber Danke nochmal für die Info. Weißt du wie das mit SQL-Injection aussieht? Passt das dann so?
Mit Zitat antworten
  #7 (permalink)  
Alt 18-09-2007, 00:46
ministry
 PHP Junior
Links : Onlinestatus : ministry ist offline
Registriert seit: Jun 2006
Ort: KI / KA
Beiträge: 965
ministry ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Wie? Mit den Hashes hat das nichts zu tun. Überprüf alle Eingaben, die vom Benutzer kommen, und wende wie schon gesagt mysql_real_escape_string auf die Strings an.
__________________
ich glaube
Mit Zitat antworten
  #8 (permalink)  
Alt 18-09-2007, 00:56
Alpenmerlin
 Registrierter Benutzer
Links : Onlinestatus : Alpenmerlin ist offline
Registriert seit: Feb 2004
Beiträge: 22
Alpenmerlin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von ministry
Wie? Mit den Hashes hat das nichts zu tun. Überprüf alle Eingaben, die vom Benutzer kommen, und wende wie schon gesagt mysql_real_escape_string auf die Strings an.
Ja, das Prüfen der Eingabe habe ich mit JavaScript vor. Die Frage war ob ich mysql_real_escape_string richtig angewendet habe. Das Skript funktioniert so wie es oben geändert habe. Ob es den Sinn erfüllt weiß ich aber nicht!
Mit Zitat antworten
  #9 (permalink)  
Alt 18-09-2007, 01:08
kapitaeniglo
 PHP Senior
Links : Onlinestatus : kapitaeniglo ist offline
Registriert seit: Jul 2002
Beiträge: 1.474
kapitaeniglo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von Alpenmerlin
Ja, das Prüfen der Eingabe habe ich mit JavaScript vor. Die Frage war ob ich mysql_real_escape_string richtig angewendet habe. Das Skript funktioniert so wie es oben geändert habe. Ob es den Sinn erfüllt weiß ich aber nicht!
Hi,

und was machst du , wenn der Benutzer Javascript deaktiviert hat?
Mit Javascript Benutzereingaben zu prüfen ist zwar nicht verkehrt, du musst aber weiterhin Serverseitig prüfen.

Gruss
Iglo
Mit Zitat antworten
  #10 (permalink)  
Alt 18-09-2007, 01:09
Alpenmerlin
 Registrierter Benutzer
Links : Onlinestatus : Alpenmerlin ist offline
Registriert seit: Feb 2004
Beiträge: 22
Alpenmerlin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Und wenn wir schon dabei sind mal ne ganz blöde Frage: Ich hab grade angefangen ein neues PHP Script (newUser.php)zu schreiben. Das sieht momentan so aus:
PHP-Code:
<?
session_start
(); 
echo 
session_id();
?>
Ich bekomme folgende Fehlermeldung:
Zitat:
Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\Programme\xampp\htdocs\functions\newUser.php:1) in C:\Programme\xampp\htdocs\functions\newUser.php on line 2

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\Programme\xampp\htdocs\functions\newUser.php:1) in C:\Programme\xampp\htdocs\functions\newUser.php on line 2
699909c12579fa567c843a7f9bd475c0
WARUM?!?
Wenn ich einen Reload ausführe ändert sich die SessionID trotzdem...
Mit Zitat antworten
  #11 (permalink)  
Alt 18-09-2007, 01:10
Alpenmerlin
 Registrierter Benutzer
Links : Onlinestatus : Alpenmerlin ist offline
Registriert seit: Feb 2004
Beiträge: 22
Alpenmerlin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Original geschrieben von kapitaeniglo
Hi,

und was machst du , wenn der Benutzer Javascript deaktiviert hat?
Mit Javascript Benutzereingaben zu prüfen ist zwar nicht verkehrt, du musst aber weiterhin Serverseitig prüfen.

Gruss
Iglo
Gutes Argument! Danke für den Hinweis. Man merkt eben doch, wenn ein paar Leute schon einiges gecodet haben...
Mit Zitat antworten
  #12 (permalink)  
Alt 18-09-2007, 01:12
tontechniker
 PHP Senior
Links : Onlinestatus : tontechniker ist offline
Registriert seit: Jul 2005
Beiträge: 1.972
tontechniker ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Die Fehlermeldung sagt es bereits:
Code:
headers already sent by (output started at ...\newUser.php:1)
Du darfst vor session_start() keine Ausgaben machen.
__________________
Die Regeln | rtfm | register_globals | strings | SQL-Injections | []
Mit Zitat antworten
  #13 (permalink)  
Alt 18-09-2007, 01:28
Alpenmerlin
 Registrierter Benutzer
Links : Onlinestatus : Alpenmerlin ist offline
Registriert seit: Feb 2004
Beiträge: 22
Alpenmerlin ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Jaja, das ist mir schon klar! Aber wo mache ich denn Angaben? Das ist die komplette Datei! Und <? muss ich ja schreiben...
Mit Zitat antworten
  #14 (permalink)  
Alt 18-09-2007, 02:37
Bugbuster
 PHP Junior
Links : Onlinestatus : Bugbuster ist offline
Registriert seit: Mar 2003
Ort: Hamm
Beiträge: 658
Bugbuster ist zur Zeit noch ein unbeschriebenes Blatt
Standard

er schreibt es nich umsonst?! sicher vorher keine html ausgaben? irgendwo ein echo?!

mfg
bugbuster
__________________
tutorial: peterkropff.de schattenbaum.de tut.php-quake.net
documentation: php.net mysql.com framework.zend.com

Die Nachtwache!
Mit Zitat antworten
  #15 (permalink)  
Alt 18-09-2007, 09:48
PHP-Desaster
 PHP Expert
Links : Onlinestatus : PHP-Desaster ist offline
Registriert seit: Mar 2006
Beiträge: 3.105
PHP-Desaster befindet sich auf einem aufstrebenden Ast
Standard

Wenn du eine UTF-8-Datei hast, check mal mit einem Hexeditor die ersten Zeichen auf die BOM.
Mit Zitat antworten
Antwort

Lesezeichen


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

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 11:04 Uhr.