You are not logged in.


boehseronkel

Unregistered

1

Thursday, September 22nd 2005, 7:52pm

Wie baue ich eine Passwortabfrage mit PHP und MySQL

Mahlzeit ... für die, die mal nen relativ sicheren Login haben wollen hier ein vorschlag von mir zur güte !

Bitte legt folgende Tabelle an :

tbl_benutzer mit den attributen : benutzer_id,benutzername,kennwort

-------------------

inc.php

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
    @session_start();
    @mysql_connect("localhost","DBUSER","DBPASS");
    @mysql_select_db("DATENBANKNAME");

    function internal($benutzername,$kennwort) {
        $mysql mysql_query("SELECT benutzer_id FROM tbl_benutzer WHERE benutzername = '".$benutzername."' AND kennwort = md5('".$kennwort."') ");
        if(mysql_num_rows($mysql) == 1) {
            $_SESSION['success'] = true;
        }else{
            return false;
        }
    }
    function angemeldet() {
        if($_SESSION['success'] == true) {
            return true;
        }else{
            echo "Sie sind nicht angemeldet";
        }
    }
?>


login.php

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
include("inc.php");
if($_POST['sender']) {
    if($_POST['benutzername'] != '') {
        $_SESSION['benutzername'] = $_POST['benutzername'];
        $kennwort $_POST['kennwort'];    
        internal($_SESSION['benutzername'],$kennwort);
            if($_SESSION['success'] == true) { 
                header("Location: intern.php");
             }else {
                 echo "Benutzerdaten sind Fehlerhaft";
            }
    }
}

?>
<html>
<head></head>
<body>
<form method="post" target="_self">
<table align="center" border="0" cellpadding="0" cellspacing="0">
<tr>
 <td colspan="2">Anmelden</td>
</tr>
<tr>
 <td>Benutzername :</td>
 <td><input type="text" name="benutzername" size="30" maxlength="40"></td>
</tr>
<tr>
 <td>Kennwort :</td>
 <td><input type="password" name="kennwort" size="30" maxlength="40"></td>
</tr>
<tr>
 <td colspan="2"><input type="submit" name="sender" value="Anmelden"></td>
</tr>
</table>
</form>
</body>
</html>


intern.php

PHP Source code

1
2
3
4
5
6
7
8
9
10
<?php
include("inc.php");
angemeldet();
?>
<html>
<head></head>
<body>
Du bist drin das ist ja einfach ^^ <a href="logout.php">Logout</a>
</body>
</html>


Nen Logout einfach, die Session von true auf false setzen bsp.

logout.php

PHP Source code

1
2
3
4
<?php
include("inc.php");
$_SESSION['success'] = false;
?>


so das müsste es gewesen sein, bei fragen hier posten wie gesagt DAS IST NUR EIN VORSCHLAG, ES GIBT 100 ANDERE LÖSUNGEN !


mfg sven


*EDIT* DIESES TUT IST NICHT GEGEN MYSQL INJECTION SICHER ES SOLL DAHER NUR ALS "ANREIZ" DIENEN ... EIN SICHERES FINDET IHR UNTEN

This post has been edited 2 times, last edit by "boehseronkel" (Sep 22nd 2005, 10:43pm)


boehseronkel

Unregistered

2

Tuesday, November 1st 2005, 11:16am

RE: Wie baue ich eine Passwortabfrage mit PHP und MySQL

Hab mich nochmal hingesetzt und ne Class Login geschrieben :) Sollte auch Funktionieren Greeetz Sven

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
class login{
        /* username, passwort und user_id werden nach DB-Prüfung gesetzt */
        var $username;
        var $passwort;  
        var $user_id;
        
        /* Variable zur Ausgabe */
        var $output;
        
        /* Konstruktor Methode */
        function login() {
            if(isset($_SESSION["user_id"])) {
                $this->output "Du bist bereits eingeloggt";
            }
            else {
                /* Falls bereits ein Cookie besteht, dann ... */
                if(isset($_COOKIE["login"]) || $_COOKIE["login"] != 0) {
                    $this->check_cookie();
                }
                /* Falls kein Cookie bestand, aber ein Formular zum Login ausgefüllt wurde, dann ... */
                else if(isset($_POST[username]) && isset($_POST[passwort])) {
                    $cookie_inhalt.=$_POST[username];
                    $cookie_inhalt.=":";
                    $cookie_inhalt.=md5($_POST[passwort]);
                    setcookie ("login",$cookie_inhalt);
                    $this->check_user($_POST[username],md5($_POST[passwort]));
                }        
            }
            echo $this->output;
        }
        
        /* Prüfung der Daten des Cookies oder des Formulars */
        function check_user($new_username,$new_passwort){
            $result=mysql_query("SELECT user_id FROM user WHERE nick = '$new_username' && pass = '$new_passwort'");
            $row mysql_fetch_array($result);
            if($row == 0) {                 
                $this->output.= "<b><font color=\"#990000\">User/Passwort&uuml;berprüfung nicht erfolgreich</font></b>";
            }
            else {
                $this->user_id $row[user_id];
                $this->username $new_username;
                $this->passwort $new_passwort;
                $this->output.= "<b><font color=\"#009900\">User/Passwort&uuml;berprüfung erfolgreich!</font></b><br>";
                $this->session_reg();
            }
            
        }
        
        /* Daten werden aus dem Cookie ausgelesen */
        function check_cookie() { 
            $cookie $_COOKIE["login"];
            $userdaten explode(":",$cookie);
            $this->check_user($userdaten[0],$userdaten[1]);
        }
        
        /* Die user_id wird in der SESSION registriert */
        function session_reg(){
            $_SESSION["user_id"] = $this->user_id;
            $this->output.= "\$_SESSION[\"user_id\"] = " $_SESSION["user_id"];        
        }
        
        /* Logout: Session wird zerstört und Inhalt des Cookies auf 0 gesetzt */
        function logout(){
            session_destroy();
            setcookie ("login","0");
        }
    }


*EDIT* DIESES TUT IST NICHT GEGEN MYSQL INJECTION SICHER ES SOLL DAHER NUR ALS "ANREIZ" DIENEN ... EIN SICHERES FINDET IHR UNTEN

boehseronkel

Unregistered

3

Sunday, July 2nd 2006, 2:58pm

Huhu, habe nochmal ne Login Funktion geschrieben ...

Diesesmal sollte es auch gegen MySQL Injection gesichert sein. Zudem habe ich fürs Cookie setzen gesorgt.

inc.php

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<?php

    @session_start();    

    @mysql_connect("HOST","USER","PASS");
        @mysql_select_db("DB");
    
    function check_string($string) {
                
        // erlaubte zeichen a-z,A-Z,0-9,-,_
                
        if((preg_match('/^[a-zA-Z0-9\-\_]+$/',$string))) return true;
                
        return false;
            
    }
    
    
    function login($benutzername,$kennwort,$modus=1,$cookie_gelesen=1) {
    
        // ############# Konfiguration start #############
    
        // ### Cookies ###
    
        // Name des Cookies
        $conf['cookie_name'] = "login_cookie";
    
        // Ablaufzeit des Cookies (1 Monat)
        $conf['cookie_zeit'] = time()+3600*24*7*4;
    
        // Inhalt des Cookies (Wird im spaeterem Verlauf festgelegt)
        $conf['cookie_inhalt'] = "";
    
        // ### Sonstiges ### 
    
        // Modus ( 1 = Session und Cookie setzen / 2 = Session ohne Cookie setzen )
        $conf['modus'] = $modus;
        
        // CookieSet ( 1 = Benutzername und Kennwort sind nicht aus einem Cookie entnommen / <1 = Benutzername und Kennwort sind einem Cookie entnommen somit ist das Kennwort schon verschluesselt )
        $conf['cookie_gelesen'] = $cookie_gelesen;
        
        // ### Variablen ###
        
        // Benutzername
        $vars['benutzername'] = htmlspecialchars(trim($benutzername));
        
        // Kennwort
        $vars['kennwort'] = htmlspecialchars(trim($kennwort));
        
        // ############# Konfiguration ende #############
        
        // Ist der Benutzername oder das Kennwort "leer" oder sind ungueltige Zeichen im String dann gib ein false wert zurueck        
        if(strlen($vars['benutzername']) == OR strlen($vars['kennwort']) == OR !check_string($vars['benutzername']) OR !check_string($vars['kennwort'])) {
            
            return false;
            
        }else {
            
            // Ist das Kennwort NICHT aus einem Cookie dann muss es mit md5 verschluesselt bzw. verhasht werden            
            if($conf['cookie_gelesen'] == 1) {
                
                $vars['kennwort'] = md5($vars['kennwort']);    
                
            }
            
            // SQL Abfrage ob benutzername und kennwort gleich den in der Datenbank sind            
            $sql = @mysql_query("SELECT benutzer_id FROM tbl_benutzer WHERE benutzername = '".$vars['benutzername']."' AND kennwort = '".$vars['kennwort']."' ");
            
            // Ist die Abfrage erfolgreich dann check den Modus            
            if(@mysql_num_rows($sql) == 1) {
            
                
                if($conf['modus'] == 1) {
                
                    // Cookie Inhalt wird aus benutzername@kennwort zusammengebaut                    
                    $conf['cookie_inhalt'] = $vars['benutzername']."@".$vars['kennwort'];
                    
                    // Cookie wird gesetzt                    
                    @setcookie($conf['cookie_name'],$conf['cookie_inhalt'],$conf['cookie_zeit']);
                        
                    // Session für den login wird gesetzt                    
                    $_SESSION['success'] = true;
                        
                    return true;
                    
                }else {
                
                    // Session für den login wird gesetzt                    
                    $_SESSION['success'] = true;
                        
                    return true;    
                    
                }    
                    
            }else { 
            
                // SQL Abfrage hat nicht geklappt                    
                return false; 
            
            }
            
        }
        
    }


index.php

PHP Source code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
<?php
    
    // Pruefen ob der Browser Cookies akzeptiert
    if(isset($_COOKIE['browser_check'])) {
        $browser_check true;
    }elseif($_GET['check'] != 1) {
        
        @setcookie("browser_check","set",time()+3600);
        header("Location: index.php?check=1");
                
                    
    }
            
    include("inc.php");
    
    // Wenn $_GET['logout'] gesetzt ist dann loesche $_SESSION['success']
    if(isset($_GET['logout'])) {
        
        // Wenn $_COOKIE['login_cookie'] gesetzt ist dann loesche Cookie
        if(isset($_COOKIE['login_cookie'])) @setcookie("login_cookie",0,time()-3600);
        
        // Loesche SESSION['success']
        unset($_SESSION['success']);
        
        //Leite weiter zur index.php
        header("Location: index.php");
        
    }
    
    // Wenn $_COOKIE['login_cookie'] gesetzt ist dann ueberpruefe den Inhalt und fuehre ggf. den auto login aus
    if(isset($_COOKIE['login_cookie']) AND !isset($_POST['sender']) AND !isset($_GET['logout'])) {
        
        // Hole den Inhalt aus dem Cookie
        $cookie_inhalt $_COOKIE['login_cookie'];
        
        // Trenne benutzername und kennwort anhand des Trennzeichens @
        $cookie_inhalt explode("@",$cookie_inhalt);
        
        // Gehe mit Cookiedaten in die login funktion
        login($cookie_inhalt[0],$cookie_inhalt[1],1,2);
        
    }
        
    // Wenn Sumbit gepostet wurde    
     if(isset($_POST['sender'])) {
     
         // Wenn Cookie setzen "aktiv"
         if($_POST['co'] == 'on') {
                 
             if(login($_POST['username'],$_POST['password']) == false) {
                 
                 echo "Sry da hat was nicht geklappt";
                 
             }
                     
         }else {
                 
             if(login($_POST['username'],$_POST['password'],2,1) == false) {
                 
                 echo "Sry da hat was nicht geklappt";
                 
             }
                 
         }
             
     }
    
     

?>


<html>
<head>
    <title>test</title>
</head>

<body bgcolor="#FFFFFF" topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0" >
<?php 

if(isset($_SESSION['success'])) {
        
    echo "drin<br><a href='index.php?logout=true'>Logout</a>";

    
}else {
    
?>

<form target="_self" method="post" name="main">
<?php if(!isset($browser_check)) echo "Ihr Browser akzeptiert keine Cookies, daher wird dieses Feld deaktiviert<br><br>"?>
User : <input type="text" name="username"><br>
Pass : <input type="text" name="password"><br>
Cookie (ja/nein) : <input type="checkbox" name="co" <?php if(!isset($browser_check)) echo "disabled";?>><br>
<input type="submit" name="sender">

</form>

<?php ?>

</body>
</html>


Hoffe das das jetzt alles so klappt ;)

Gruss Sven

Crematory

Power Clubber

Posts: 566

Location: 127.0.0.1

Occupation: Student

  • Send private message

4

Sunday, July 2nd 2006, 4:27pm

Super Sven so hab ich gebrauct wollte erst Thread öffnen hasts mir aber abgenommen =) ^^ Thx
MfG

PS: Kanns sei ndas du ein PHP-Freak bist? ^^
Judenverfolgung, Inquisitionen, Kreuzigungen,
Hexenverbrennung, wir wissen wie man feiert
- Ihre Kirche †

mcferrari

Stamm Clubber

Posts: 56

Location: Wolfsburg

Occupation: Schüler

  • Send private message

5

Tuesday, July 18th 2006, 2:14pm

der code ist echt gut. Aber ich habe da mal eine frage und zwar wie kann ich den Benutzername ausgeben, so das er z.b auf jeder geschützen seite zu sehen ist. Auf der intern.php geht das ja indem man


PHP Source code

1
2
3
4
<?
$benutername $_POST["username"];
echo "$bentzername"
?>


Da wird der Benutzername ja ausgegeben. Aber wie bekomme ich diese daten auf andere seiten. Das heißt ja das er "$benutername" irgendwo speichern muss.

Ihr versteht doch was ich meine oder=)

mcferrari

Stamm Clubber

Posts: 56

Location: Wolfsburg

Occupation: Schüler

  • Send private message

6

Tuesday, July 18th 2006, 8:14pm

Der Code ist gut. Nur ich habe eine frage. Wie bekomme ich das den hin, das auf jeder seite der benutzername angezeigt wird?

Mogget

Neuer Clubber

Posts: 52

Location: Nordrhein-Westfalen

Occupation: Schüler

  • Send private message

7

Monday, April 23rd 2007, 7:19pm

Hallo,

ich hab keine Erfahrung mit programmiersprache, möchte aber auf meiner Homepage ein Login bieten, das man bestimmte Seiten nur sehen kann, wenn man registriert und angemeldet ist!!!!!!!!!!!!!!!!!!!
kann mir jemand vielleicht genau erklären was ich da machen muss?


mfg

Mogget
Verzeiht meine Rechtschreibfehler,
ich bin doch Legastheniker!!!! xD

BraiNhack

Neuer Clubber

Posts: 19

Location: germany

Occupation: student

  • Send private message

8

Monday, July 2nd 2007, 10:25pm

Bin ziemlich ein Anfänger in PHP coden also wollte ich euch fragen wie das jetzt alles einbaue ?? Connect mit der Mysql datenbank bekomm ich ihn nur wie mach ich jetzt ein login script für meine seite wo die sich einloggen können und wie verknüfpe ich das mit den codes die ihr hier reingepostet habt :)
Das Wissen gehört der Welt!
---->-----OpenSource-----<-----

Mike1990

Neuer Clubber

Posts: 84

Location: Deutschland

Occupation: Azubi

  • Send private message

9

Tuesday, July 8th 2008, 2:55pm

Hallo COM,
habe nen kleiner verbesserungsvorschlag ^^


Wie wäre es mit einen automatischen TimeOut?
Also das man nach 15minuten inaktivität ausgelogt wird?

Ich benutze das bei meinen Login Scripten immer da ich es für meine Statistik brauche (nich das ein user jahrelang eingelogt bleibt)

Kann sein das es in deinen Script schon vorhanden ist. Falls ja tut mir leid :wacko:

boehseronkel

Unregistered

10

Tuesday, July 8th 2008, 3:06pm

Hallo COM,
habe nen kleiner verbesserungsvorschlag ^^


Wie wäre es mit einen automatischen TimeOut?
Also das man nach 15minuten inaktivität ausgelogt wird?

Ich benutze das bei meinen Login Scripten immer da ich es für meine Statistik brauche (nich das ein user jahrelang eingelogt bleibt)

Kann sein das es in deinen Script schon vorhanden ist. Falls ja tut mir leid :wacko:


Hallo Mike,

es kommt auch den Anwendungsfall an - beim Onlinebanking sehe ich das genauso wobei da 15 Minuten sicherlich schon viel zu lange ist.
Aber generell finde ich ein Timeout z.B. bei Foren o. Communitys überflüssig - überleg mal Du müsstest Dich hier alle 15 Minuten (wenn Du keinen Reload der Seite machst) neu anmelden.

Ätzend ;)

Gruß Sven

Mike1990

Neuer Clubber

Posts: 84

Location: Deutschland

Occupation: Azubi

  • Send private message

11

Tuesday, July 8th 2008, 3:38pm

Hallo COM,
ja ok in dem falle hast du recht da wäre das etwas überflüssig.

Es sei den du logst ihn aus. Der Cookie oder die Session - je nachdem was verwendet wird - wird nicht gelöscht außer beim manuellen logout und dann wird die verbindung erneut aufgebaut und er automatisch eingeloggt ^^

Weil ich habe bei mir immer anzeigen wie viele user und welcher user online ist von daher finde ich sowas wichtig.

mfg
Mike1990

boehseronkel

Unregistered

12

Wednesday, July 9th 2008, 7:31am

Hallo COM,
ja ok in dem falle hast du recht da wäre das etwas überflüssig.

Es sei den du logst ihn aus. Der Cookie oder die Session - je nachdem was verwendet wird - wird nicht gelöscht außer beim manuellen logout und dann wird die verbindung erneut aufgebaut und er automatisch eingeloggt ^^

Weil ich habe bei mir immer anzeigen wie viele user und welcher user online ist von daher finde ich sowas wichtig.

mfg
Mike1990


Hi,

das kannst Du generell über ne statistische Tabelle realisiseren - ggf. userID (wenn eingeloggt) und immer nen Zeitstempel loggen.
Dann machst Du z.B. bevor Du Deine "Statistik" anzeigst ne Prüfung ob der Zeitstempel z.B. 2 Minuten nicht aktualisiert wurde und zählst die einträge nicht mit !
Wenn der User / Gast wieder refresht wird nen neuer Zeitstempel gesetzt ...

Gruß SVen

Mike1990

Neuer Clubber

Posts: 84

Location: Deutschland

Occupation: Azubi

  • Send private message

13

Wednesday, July 9th 2008, 9:22am

Hallo COM,
ja genauso meine ich das. Genauso habe ich das gemacht nur das ich das nich bei der rechnung berücksichtigt habe sondern direkt in der Datenbank geupgraded habe.

Naja kann man machen wie man will php bietet da viele möglichkeien ^^


mfg
Mike1990

linker

Neuer Clubber

Posts: 54

Location: Tegernsee

Occupation: Student

  • Send private message

14

Saturday, July 26th 2008, 6:40pm

Fatal error: Call to undefined function angemeldet()

Zeigts beimir an,wenn ich intern.php aufrufe.

15

Tuesday, September 28th 2010, 9:06am

liumingzhu

Bin ziemlich ein Anfänger in PHP coden also wollte ich euch fragen wie das jetzt alles einbaue ?? Connect mit der Mysql datenbank bekomm ich ihn nur wie mach ich jetzt ein login script für meine seite wo die sich einloggen können und wie verknüfpe ich das mit den codes die ihr hier reingepostet habt http://www.edhardykleidungshop.com/

Social bookmarks

Rate this thread