Home | Registrieren | Einloggen | Suchen | Aktuelles


Forum » PHP & MySQL » PW-Schutz am besten realisieren? Antworten
PW-Schutz am besten realisieren?

webworker
Fachidiot


Beiträge: 115


Hi,

wie kann ich einen Passwort-Schutz mittels PHP am besten realisieren?
Man soll sich bis zu einem Klick auf "Logout", bzw. bis zum Verlassen der Seite auf mehreren Seiten eingeloggt "bewegen" können.

if($user == $row[user] && $pw == $row1[passwort])
{
...
}

...

?
*g*

Wie kann ich es anstellen, dass das PW bis zum Verlassen der Seite / Logout klicken gespeichert wird?


  Profil   Editieren   Zitieren

kingkool
Mausakrobat


Beiträge: 154


ich würd dir entweder cookies vorschlagen, welche eher nicht so geeignet sind ,da nicht alle benutzer des web diese wollen würd ich sagen speicher das ganze in ner serverseitigen session.....

greetz
kool

---
--------------------------------------
http://www.alkool.ch

  Profil   Website   Editieren   Zitieren

Can
Halbgott


Beiträge: 1330


Genau, also prüf beim Login, ob das richtige Passwort angegeben wurde, wenn ja, legst du in ner SQL-Tabelle ne Session-ID an, die du dann in allen Links als Parameter übergibst. Natürlich musst du dann überall überprüfen, ob die Session-ID gültig ist, also ob IP und User-Agent stimmt. Beim Logout (oder nach nem Timeout) wird die Session-ID dann wieder gelöscht.

---
"S-púrlawits'chkâ A-ngáse gûrewüdíx" - Zaphrot Bibelprox

  Profil   E-Mail   Editieren   Zitieren

c3o
Posting-Schinder


Beiträge: 586


Das mit den Sessions würde ich dann doch PHP selbst überlassen...
Hier ein schnelles komplettes Beispiel -- andere Seiten müssten nur nach dem Vorbild von index.php aufgebaut werden.. das Login merkt er sich über die Seiten hinweg.

[index.php]

<?
session_start();
include('layout.inc.php'); output_head('Meine erste passwortgeschuetzte Seite');
include('loginout.inc.php');
?>

<strong>du bist drin!</strong>

<?
output_foot();
?>

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


[loginout.inc.php]

<?
if($_POST['user']) { //loggen wir grad ein?
/* db check hier */
$richtigeruser = 'ich';
if($user == $richtigeruser && $pw == $richtigespw) {
session_register('user');
} else {
echo '<p><strong>Falscher Login!</strong></p>';
}
} elseif($_POST['logout']) { //loggen wir grad aus?
session_destroy(); $_SESSION['user'] = '';
}

if(!$_SESSION['user']) { // nicht eingeloggt
echo 'Bitte logge dich ein';
?>
<form method="POST"> <input name="user" /> <input name="pw" /> <input type="submit" /> </form>
<?
output_foot();
die();
}
?>

<p>Hallo <?=$_SESSION['user'] ?>! <form method="POST" style="display:inline"><input type="submit" name="logout" value=" Logout " /></form></p>


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

[layout.inc.php]

<?
function output_head($title) {
?>
<html><head><title><?=$title ?></title></head><body>
<?
}

function output_foot() {
?>
</body></html>
<?
}
?>



Diese Nachricht wurde geändert von: c3o
  Profil   E-Mail   Website   Editieren   Zitieren

webworker
Fachidiot


Beiträge: 115


Ich habe mich mit den Sessions noch nicht viel beschäftigt, aber wie ich das hier sehe, funktioniert das so:

Der User gibt Name & PW ein, wenn die Daten mit einer vorhandenen Session in der DB nicht übereinstimmen, wird eine neue Session angelegt, und wenn sie übereinstimmen, kommt man zum entsprechenden Inhalt.

Bei den nächsten Seiten wird dann geprüft ob die Daten in der DB (IP, User-Agent) mit den anderen übereinstimmen, wenn ja ... ...

Richtig? (wenn nicht bitte korrigieren...)

Nur verstehe ich folgenden Code nicht:

session_register('user');

Was wird da genau gemacht?

Diese Nachricht wurde geändert von: webworker
  Profil   Editieren   Zitieren

webworker
Fachidiot


Beiträge: 115


Noch eine Frage...

Wie kann ich soetwas wie automatischen Login machen? (Cookie, ich weiß - aber wie geht das )


  Profil   Editieren   Zitieren

c3o
Posting-Schinder


Beiträge: 586


<?
if($_POST['user']) { //loggen wir grad ein?
Wenn der User das Login-Formular abgeschickt hat...
/* db check hier */
$richtigeruser = 'ich';
if($user == $richtigeruser && $pw == $richtigespw) {
... und das Passwort richtig ist...
session_register('user');
...machen wir $user, also seinen Namen, zu einer Session-Variable, die uns also auf jeder Seite zur Verfügung steht.
} else {
Andernfalls, bei falschem Passwort..
echo '<p><strong>Falscher Login!</strong></p>';
...eine Fehlermeldung.
}
} elseif($_POST['logout']) { //loggen wir grad aus?
Wenn der User aber gerade den Logout-Button betätigt hat...
session_destroy(); $_SESSION['user'] = '';
...löschen wir seine Session (sprich in der Praxis dann die Sessiondaten auf dem Server und sein Sessioncookie). Da die Sessionvariablen aber schon beim Abruf des Scripts eingelesen wurden, würde das dann erst ab der nächsten Seite voll gültig, auf dieser haben wir noch die alten Sessionvariable ('user'). Daher leeren wir sie händisch.
}

--- Teil 2 ---

if(!$_SESSION['user']) { // nicht eingeloggt
Wenn es jetzt keine Sessionvariable namens user gibt, ist der Besucher nicht eingeloggt.
echo 'Bitte logge dich ein';
Dazu fordern wir ihn also mit diesem Formular auf...
?>
<form method="POST"> <input name="user" /> <input name="pw" /> <input type="submit" /> </form>
<?
output_foot();
die();
...und beenden hier die Seite für ihn! Weiter wird dank des die() nicht geparst, wenn der User nicht eingeloggt ist! Möglich wär hier auch ein großes: } else { gewesen, in das dann der gesamte Inhalt kommt. Das ist aber von der Struktur her umständlich, weil irgendwo am Ende diese geschwungene Klammer noch geschlossen werden müsste. PHP würde einen Parse-Error melden, wenn wir die nicht noch in dieser Datei beenden. Wenn, dann würden wir sie aber in der Hauptddatei (index.php), wo der Inhalt steht, am Ende schließen wollen.
}
(end if nicht eingeloggt)
?>

  Profil   E-Mail   Website   Editieren   Zitieren

c3o
Posting-Schinder


Beiträge: 586


soooo, jetzt mit optionalem merk-cookie und md5-verschlüsselung:
http://c3o.org/tools/loginout/

  Profil   E-Mail   Website   Editieren   Zitieren

[SpecFor]crusher
Otto-Normal-Poster


Beiträge: 97


hmm...

fehlt da nicht ein <form action="bla.php"> ?

oh, sorry, du includest die Loginprüfung...

Noch ein Script, bitte mal kritisieren.. =)
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:
session_start() ;

$connect = mysql_connect($db["host"], $db["user"], $db["passwort"]);

if (isset($sent))
 {
  if ($sent==1)
    {

          $sql="SELECT user, passwort FROM insolvenz WHERE user='$userid'"      ;
          mysql_select_db($db["database"], $connect);
          $result=mysql_query($sql, $connect)         ;
          if (mysql_num_rows($result)>=1)
              {
               $ergebnis=mysql_fetch_array($result) ;

                if ($ergebnis["passwort"]==$kwort AND $ergebnis["user"]==$userid)
                   {
                    $login="1";
                    session_register("login","userid");
                    include("_header.php");
                    echo "Hallo, Ihre session ID ist ".SID." Login=$login, $userid!<br>";
                    echo "<a href=\"./index.php\">Weiter</a>";
                    include("_footer.php");
                   }


                elseif ($ergebnis["passwort"]!=$kwort)
                    {
                     $login="2";
                     unset($sent);
                            if(isset($versuche))
                             {
                               $versuche=$versuche+1 ;

                                if($versuche==3)
                                    {
                                     $sql_eintrag="INSERT INTO login (ip, triedid, tries) VALUES ('$REMOTE_ADDR', '$userid', '$versuche')";
                                     mysql_select_db($db["database"], $connect);
                                     mysql_query("$sql_eintrag", $connect);

                                     $auslesen=mysql_query("SELECT ip, triedid, tries FROM login", $connect);
                                     $result=mysql_fetch_assoc($auslesen);
                                     include("_header.php");
                                     foreach($result as $feld) {
                                     echo "$feld <br>" ;}
                                     echo "Falsches PW, $versuche Versuche";
                                     include("_footer.php");


                                    }
                               }
                            else
                             {

                               $versuche=1 ;
                               include("_header.php");
                               echo "Falsches PW, $versuche Versuche";
                               include("_footer.php");

                             }


                        session_register("versuche","login");


                    }
               }

            else
                    {
                    $login="3";
                    unset($sent);
                    include("_header.php");
                    echo "Benutzer unbekannt";
                    include("_footer.php");
                    }


    }
 }
  if ($logout==1)
    {
      session_unregister("login");
      session_unregister("userid");
      unset($login);
      include("_header.php");
      echo "Erfolgreich ausgeloggt!";
      include("_footer.php");
    }

Ist noch WiP, aber wird später eine Mail mit IP etc. bei mehr als 3 fehlgeschlagenen Login-Versuchen beinhalten..
Könnt ihr mal bewerten das Script, und mal eben ein paar Tipps geben, sit mein erster Versuch in diese Richtung..
achja, der login (in header.php)
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:
          <?

              if (isset($login))
               {
                if ($login=="1")
                     {
                      echo "<p>";
                      echo "<b id=\"xx-small\">Eingeloggt für Fall Nr. ".$userid.". </b><br>";
                      echo "<b id=\"xx-small\"><a href=\"./login.php?logout=1\">Logout</a></p>"   ;
                      }
                else
                      {
          ?>
                        <form action="login.php" method="POST"> <input type="hidden" name="sent" value="1">
                                       <table cellspacing="2" cellpadding="0" border="0" id="xx-small">
                                           <tr>
                                            <td>Verwaltungsnr. </td>
                                            <td><input type="Text" name="userid" value="" size="5" maxlength="20"> </td>
                                           </tr>
                                           <tr>
                                             <td>Kennwort </td>
                                             <td><input type="Password" name="kwort" value="" size="5" maxlength="20"> </td>
                                            </tr>
                                            <tr>
                                             <td><input type="Submit" name="" value="Senden"> </td>
                                             <td><input type="reset" value="reset"> </td>
                                            </tr>
                                        </table>
                       </form>
          <?           }
              }
              else
                      { ?>
                                    <form action="login.php" method="POST"> <input type="hidden" name="sent" value="1">
                                     <table cellspacing="2" cellpadding="0" border="0" id="xx-small">
                                      <tr>
                                       <td>Verwaltungsnr. </td>
                                       <td><input type="Text" name="userid" value="" size="5" maxlength="20"> </td>
                                      </tr>
                                      <tr>
                                       <td>Kennwort </td>
                                       <td><input type="Password" name="kwort" value="" size="5" maxlength="20"> </td>
                                      </tr>
                                      <tr>
                                       <td><input type="Submit" name="" value="Senden"> </td>
                                       <td><input type="reset" value="reset"> </td>
                </tr>
               </table>
              </form>
                     <? } ?>


lasst euch nicht verwirren, mit Verwaltungsnummer meine ich den User. Das hat nur "homepagetechnische" Gründe =)

Diese Nachricht wurde geändert von: [SpecFor]crusher
  Profil   E-Mail   Website   Editieren   Zitieren

Ehemaliges Mitglied (#644)
Forenheld


Beiträge: 835


quark,
macht das doch nicht alles auf die alte weise:
[login.php]
session_start ();

if ($_POST['username'] == $user && $_POST['password'] == $passwort) {
$_SESSION['variable'] == "login";
}
else {
//login schmarrn
}

auf der nächsten seite:

[drinne.php]

session_start ();
if (!$_SESSION['variable'] == "login") {
header ("Location: login.php");
exit;
}

else {
// das zeug das ausgegeben wird wenn alles korrekt ist
}

so geht das heute (ungefähr)

  Profil   Editieren   Zitieren

[SpecFor]crusher
Otto-Normal-Poster


Beiträge: 97


Und was ist daran anders?! außer dass du keine globals verwendest?

  Profil   E-Mail   Website   Editieren   Zitieren

c3o
Posting-Schinder


Beiträge: 586


"alte weise"? "heute"?

deins ist eine abgespeckte, user-unfreundlichere und unfertige version von ziemlich genau dem was ich oben gepostet hab.
mach da mal logout und persistentes cookie dazu, lass es von jeder seite funktionieren ohne dass der user nach dem einloggen irgendwo anders rauskommt als er angefangen hat, und ermögliche die einbindung in jede datei mit genau 2 zeilen code [im beispiel session_start(); & include('loginout.inc.php');], dann können wir gern vergleichen -- ich lerne sehr gern dazu!

Diese Nachricht wurde geändert von: c3o
  Profil   E-Mail   Website   Editieren   Zitieren

Ehemaliges Mitglied (#644)
Forenheld


Beiträge: 835


ja sorry, ich hab das so erklärt bekommen und hab das fürher genauso gemacht wie in den anderen scrits.
der sagte das währe besser und "neuer" !!!
jedem das seine

  Profil   Editieren   Zitieren

[SpecFor]crusher
Otto-Normal-Poster


Beiträge: 97


c3o schrieb am 06.06.2003 22:33
"alte weise"? "heute"?

deins ist eine abgespeckte, user-unfreundlichere und unfertige version von ziemlich genau dem was ich oben gepostet hab.
mach da mal logout und persistentes cookie dazu, lass es von jeder seite funktionieren ohne dass der user nach dem einloggen irgendwo anders rauskommt als er angefangen hat, und ermögliche die einbindung in jede datei mit genau 2 zeilen code [im beispiel session_start(); & include('loginout.inc.php');], dann können wir gern vergleichen -- ich lerne sehr gern dazu!

an wen ging das?

  Profil   E-Mail   Website   Editieren   Zitieren

Ehemaliges Mitglied (#644)
Forenheld


Beiträge: 835


ich denke eher an mich!

  Profil   Editieren   Zitieren
Seite 1 | 2  

Antworten
Nach oben