Einzelnen Beitrag anzeigen

Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#12

Re: [PHP] Session-Management - Sicherheit

  Alt 19. Jul 2009, 21:37
Ich kann dir ja mal zeigen, wie ich es gemacht hab:

Ich habe eine inc_auth.php die den Benutzer identifiziert. Jede Daei bindet dann diese includedatei ein und ruft anschließend eine Funktion auf, die prüft ob der User die Seite sehen darf.

Das sieht dann so aus:
Code:
<?php
include ('includes/inc_func.php');
include ('includes/inc_auth.php');

auth_check (2);

print_header (7);

$shownewblog = FALSE;
$showerrors = FALSE;

echo '<h1>Admin</h1>';
Zuerst werden die Dateien eingebunden. (inc_func.php enthält diverse Funktionen)

Dann wird die Funktion auth-check() aufgerufen, die überprüft, ob der Benutzer berechtigt ist, die Seite zu sehen. Die Zahl 2 steht hier für die Benutzergruppe "Admins"

Hier ist die inc_auth.php:
Code:
<?php
session_start ();

include ('inc_mysql.php');

if (empty ($_SESSION['username']))
{
   $_SESSION['username'] = 'guest';
   $_SESSION['pwd_hash'] = sha1('');
}

$res = mysqlquery ('select user.id,rights+0,path from user,templates where username="' . $_SESSION['username'] . '" and password="' . $_SESSION['pwd_hash'] . '" and user.template=templates.id');

if (mysql_num_rows ($res) == 1)
{
   $_SESSION['userid'] = mysql_result ($res, 0, 0);
   $_SESSION['rights'] = (int)mysql_result ($res, 0, 1);
   $_SESSION['tplpath'] = mysql_result ($res, 0, 2);
}
else
{
   $_SESSION['userid'] = 1;
   $_SESSION['username'] = 'guest';
   $_SESSION['pwd_hash'] = sha1('');
   $_SESSION['rights'] = 0;
   $_SESSION['tplpath'] = 'templates/default/';
}
?>
Wie man sieht wird - falls kein User eingeloggt ist - ein Gastbenutzer benutzt. Dieser sollte auch in der Datenbank vorhanden sein. Die Spalte "rights" in der Tabelle gibt an, welche Rechte der Benutzer hat - in diesem Fall isses eine 0 für Gäste, eine 1 für registrierte Benutzer und eine 2 für Admins.

Hier die Funktion auth_check()
Code:
function auth_check ($level)
{
   if ($_SESSION['rights'] < $level)
   {
     print_header ($_GET['site']);
     echo '
Sie haben nicht die ben&ouml;tigten Rechte f&uuml;r diesen Bereich, bitte loggen Sie sich ein!';
      parse_tpl ('logon', array ('target' => 'index.php', 'redirect' => $_SERVER['PHP_SELF']));
      print_footer ();
      exit;
   }
}
Falls der user nicht die Berechtigung hat, auf die Seite zuzugreifen, gibt sie eine Fehlermeldung aus und zeigt die Login-Seite (wird aus einem Template geparst).
  Mit Zitat antworten Zitat