mysqldumper
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 17.06.2005, 21:40   #1
TP-Senior
 
Registriert seit: Oct 2004
blockbaster ist auf einem guten Weg

Members Area


Wenn man Teile eines Internetauftritts vor neugierigen Augen schützen will, benötigt man ein wirksames System zur Zugangskontrolle. In vielen Fällen bietet sich hier die bekannte HTTP-Authentifizierung an, die man beispielsweise per .htaccess-Datei umsetzen kann. Diese Methode hat aber den Nachteil, dass es auch in modernen Browsern immer noch keine praktikable Möglichkeit gibt, sich wieder abzumelden. Dieser Artikel soll zeigen, wie man Dokumente auf relativ einfache Weise sinnvoll schützen kann. Voraussetzung dafür ist ein Webserver mit PHP-Unterstützung.

Das System wird mittels Sessions umgesetzt (engl. Session = Sitzung). In PHP ist eine Session im Prinzip eine Datei, die sich im Dateisystem des Webservers befindet. In ihr sind Daten gespeichert, auf die man über den speziellen Array $_SESSION zugreifen kann. Jeder Benutzer, der mit seinem Browser eine Seite aufruft, die Sessions benutzt, bekommt nun vom Server eine einmalige Session-ID zugewiesen, über die er identifiziert werden kann. Dadurch ist es möglich, Daten benutzerbezogen zu speichern, die während einer Sitzung wiederverwendet werden können. Anwendungsmöglichkeiten sind zum Beispiel ein Warenkorb beim Einkaufen im Internet oder eine Administrationsoberfläche für ein Content Management System.

Das hier beschriebene Loginsystem umfasst die 3 Dateien login.php, logout.php und auth.php, welche sich alle im selben Verzeichnis befinden. Die Datei login.php beinhaltet sowohl das Formular zum Anmelden als auch die Routinen, um die Benutzerdaten zu verarbeiten und bei erfolgreicher Anmeldung entsprechende Daten in die Session zu speichern. Die Datei logout.php zerstört die Sitzungsdaten und meldet so den Benutzer ab. auth.php enthält den essentiellen Teil, nämlich die Überprüfung, ob der Benutzer aktuell angemeldet ist und somit berechtigt, das angeforderte Dokument anzusehen. Diese Datei wird in jedes zu schützende Dokument eingebunden.

die login.php
PHP-Code:
<?php
     
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
      
session_start();

      
$username $_POST['username'];
      
$passwort $_POST['passwort'];

      
$hostname $_SERVER['HTTP_HOST'];
      
$path dirname($_SERVER['PHP_SELF']);

      
// Benutzername und Passwort werden überprüft
      
if ($username == 'benjamin' && $passwort == 'geheim') {
       
$_SESSION['angemeldet'] = true;

       
// Weiterleitung zur geschützten Startseite
       
if ($_SERVER['SERVER_PROTOCOL'] == 'HTTP/1.1') {
        if (
php_sapi_name() == 'cgi') {
         
header('Status: 303 See Other');
         }
        else {
         
header('HTTP/1.1 303 See Other');
         }
        }

       
header('Location: http://'.$hostname.($path == '/' '' $path).'/index.php');
       exit;
       }
      }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
 <head>
  <title>Geschützter Bereich</title>
 </head>
 <body>
  <form action="login.php" method="post">
   Username: <input type="text" name="username" /><br />
   Passwort: <input type="password" name="passwort" /><br />
   <input type="submit" value="Anmelden" />
  </form>
 </body>
</html>
Erläuterung:
Der Programmcode in dieser Datei ist für den Anmeldeprozess zuständig. Das Skript prüft zuerst, ob der Benutzer schon angemeldet ist. Ist das nicht der Fall, wird ein Formular angezeigt, welches Benutzername und Passwort über die Methode POST wieder an die Datei login.php sendet, um dann wiederum weiterverarbeitet zu werden. Hier sind sowohl Benutzername als auch Passwort im Quelltext fest einprogrammiert – denkbar wäre aber zum Beispiel auch die Abfrage von Benutzerdaten aus einer Datenbank oder einer Textdatei, so dass mehrere Benutzernamen eingerichtet werden können.

Wurden Benutzername und Passwort korrekt eingegeben, wird in der am Anfang des Skripts geöffneten Session eine Variable mit dem Namen angemeldet und dem Wert true gespeichert.

Im nächsten Schrit wird der Benutzer auf die Datei index.php weitergeleitet. Dies geschieht mittels der Funktion header('Location: ...'). Da die Location-Anweisung einen vollständigen URI erwartet, man diesen vielleicht aber aus Bequemlichkeit nicht für jedes Projekt ändern will oder den künftigen URI noch nicht kennt, wird er aus Servervariablen zusammengebaut, so dass man nur noch den letzten Teil an seine Bedürfnisse anpassen muss. Im Beispiel befindet sich die Datei index.php im selben Verzeichnis wie login.php.

Waren Benutzername oder Passwort falsch, wird wieder das Login-Formular angezeigt – der Benutzer muss die Zugangsdaten erneut eingeben.

Der HTTP Statuscode 303 See Other wird hier aus Gründen der Standardkonformität gesendet: Bei einem Location-Header sendet PHP standardmäßig den Statuscode 302, nur ist hier nicht definiert, ob der nachfolgende Weiterleitungsrequest per POST oder GET getätigt werden soll. HTTP/1.1 wurde daher unter anderem um die Statuscodes 303 und 307 erweitert, die genau das festlegen. Ältere Browser, die nur HTTP/1.0 implementiert haben, bleiben bei der Abfrage nach $_SERVER['SERVER_PROTOCOL'] außen vor, bekommen so den obligatorischen Statuscode 302 und reagieren darauf, wie sie programmiert wurden. In fast allen dieser älteren Browser wird die nächste Seite dann per GET angefordert.

Wichtig:
Achten Sie darauf, dass die Passwörter gut gesichert sind. Der beste Passwortschutz nützt nichts, wenn Passwörter im Klartext gespeichert sind und im schlimmsten Fall sogar über den Browser gelesen werden können. Auch im Beispiel ist darauf zu achten, dass die Datei login.php nicht für andere Systembenutzer auf dem Webserver lesbar ist. Am bequemsten ist es, wenn eine (z.B. MySQL-)Datenbank mit eigenem Benutzernamen zur Verfügung steht, auf die niemand anderes Zugriff hat. Um zusätzlich an Sicherheit zu gewinnen, kann es außerdem sinnvoll sein, die Passwörter zusätzlich zu verschlüsseln, bzw. nur dessen Hash-Wert zu speichern, beispielsweise per md5-Funktion.

die logout.php
PHP-Code:
<?php
     session_start
();
     
session_destroy();

     
$hostname $_SERVER['HTTP_HOST'];
     
$path dirname($_SERVER['PHP_SELF']);

     
header('Location: http://'.$hostname.($path == '/' '' $path).'/login.php');
?>
Erläuterung:
Die Datei logout.php ist einzig und allein dafür zuständig, die Session - und damit die Information, dass der Benutzer angemeldet ist - zu zerstören. Danach wird der Benutzer wieder zum Anmeldeformular weitergeleitet.

die auth.php
<?php
session_start();

$hostname = $_SERVER['HTTP_HOST'];
$path = dirname($_SERVER['PHP_SELF']);

if (!isset($_SESSION['angemeldet']) || !$_SESSION['angemeldet']) {
header('Location: http://'.$hostname.($path == '/' ? '' : $path).'/login.php');
exit;
}
?>

Erläuterung:
Dies ist die Datei, die später in jede zu schützende Seite eingebunden werden muss. Es wird dann immer überprüft, ob die Sessionvariable angemeldet existiert und ihr Wert true ist. Falls das nicht der Fall ist, wird der Benutzer wieder zum Anmeldeformular weitergeleitet. Wichtig ist hier die exit-Anweisung nach der Weiterleitung, damit kein weiterer Code ausgeführt werden kann und das Skript sofort beendet wird.

Eure geschützte Datei index.php
PHP-Code:
<?php include('auth.php'); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
 <head>
  <title>Geschützter Bereich</title>
 </head>
 <body>
  <h1>Herzlichen Glückwunsch!</h1>
  <p>Sie sind nun angemeldet.</p>
  <p>Sie können sich auch wieder <a href="logout.php">abmelden</a>.</p>
 </body>
</html>
Erläuterung:
Die erste und einzige Anweisung, die eine geschützte Seite enthalten muss, ist der Befehl zum Einbinden der Datei auth.php, nämlich include in der ersten Zeile. Der Rest der Datei kann eine ganz normale HTML-Seite sein. Wenn Sie mehrere Dokumente schützen wollen, müssen Sie diese Zeile einfach am Anfang jeder Datei einfügen. Solange der Benutzer sich nicht explizit abgemeldet hat - ein Link zum Abmelden sollte natürlich immer vorhanden sein - ist keine weitere Eingabe des Passworts nötig.

Beachten Sie:
Die hier beschriebene Methode bringt natürlich auch gewisse Einschränkungen und Nachteile mit sich. Beispielsweise können im Gegensatz zur HTTP-Authentifizierung komplette Verzeichnisse nicht ohne weiteres geschützt werden, der Schutz beschränkt sich lediglich auf Dateien, die von PHP geparst werden – in der Regel also nur Textdokumente wie z.B. HTML- oder XML-Dateien.
blockbaster ist offline   Mit Zitat antworten


Alt 18.06.2005, 00:43   #2
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
Klasse ! Gut erklärt und sehr nützlich.
herzkichen Dank für die ausführlichen Erklärungen
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 10.10.2005, 14:48   #3
TP-Veteran
 
Benutzerbild von Butterstulle
 
Registriert seit: Jun 2002
Ort: Hamburg Altona
Butterstulle ist ein richtiges Arbeitstier - DANKEButterstulle ist ein richtiges Arbeitstier - DANKEButterstulle ist ein richtiges Arbeitstier - DANKEButterstulle ist ein richtiges Arbeitstier - DANKEButterstulle ist ein richtiges Arbeitstier - DANKEButterstulle ist ein richtiges Arbeitstier - DANKE
Vielen Dank,
Super klar formuliert, das verstehe sogar ich
Hab gerade soetwas gesucht, habe nicht erwartet so ein klasse script zu finden.
Butterstulle ist offline   Mit Zitat antworten
Alt 11.10.2005, 23:56   #4
321
TP-Specialist
 
Benutzerbild von 321
 
Registriert seit: Nov 2004
Ort: Die Insel in Europa die aus Europa erst Europa macht _________________________ Nähe Lenzburg
321 hilft, wo's geht321 hilft, wo's geht321 hilft, wo's geht
auch von mir ein Merci!

Frage: Warum 303 und nicht 403?
__________________
[321 Name="Joe"]
wie immer, lieber gleich mit notepad, dem Editor meines Vertrauens
[/321]


use my HTML-Tester

Motto'06: Mut zur deutschen Sprache!
321 ist offline   Mit Zitat antworten
Alt 12.10.2005, 00:04   #5
TP-Greis
 
Benutzerbild von Boris
 
Registriert seit: Mar 2001
Ort: Berlin, Germany
Boris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKE
Prima Arbeit, das gibt einen Fleißpunkt
__________________
My software never has bugs. It just develops random features ...

» DevShack - die Website des freien Webentwicklers Boris
Boris ist offline   Mit Zitat antworten
Alt 12.10.2005, 10:17   #6
TP-Senior
 
Benutzerbild von Screensize
 
Registriert seit: Jun 2003
Ort: Zwickau / Sachsen
Screensize macht sich hier sehr viel Mühe
Hallo,

Danke für das Script. Just im Moment brauchte ich sowas.

Ein Frage hätte ich noch. Ich vermute das die angemeldeten User sich nicht abmelden, wenn Sie die Seite verlassen. Kann man die Session auch nach einer gewissen Zeit automatisch zerstören oder reicht da schon den Browser zu schließen? Ich möchte verhindern, dass an öffentlichen PCs der nächste Nutzer noch auf die Seite kommt (zumindest nach einer gewissen Zeit)

Danke schon mal und viele Grüße

Rico
__________________
--
Wo sind all die Indianer hin...?

Schlossplatz3.de
Screensize ist offline   Mit Zitat antworten
Alt 12.10.2005, 10:59   #7
TP-Special Mod
 
Benutzerbild von steffenk
 
Registriert seit: Feb 2005
Ort: Haan / NRW
steffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine Usersteffenk lebt für das TP und seine User
Mach einfach einen Button mit "ausloggen" und dann führst Du aus:

$_SESSION=Array();
__________________

Typo3 · MySQLDumper · dislabs
·
manche Mühlen mahlen schneller ...
"Ich habe Rücken"
Horst Schlämmer
steffenk ist offline   Mit Zitat antworten
Alt 01.02.2006, 15:30   #8
TP-Veteran
 
Benutzerbild von Butterstulle
 
Registriert seit: Jun 2002
Ort: Hamburg Altona
Butterstulle ist ein richtiges Arbeitstier - DANKEButterstulle ist ein richtiges Arbeitstier - DANKEButterstulle ist ein richtiges Arbeitstier - DANKEButterstulle ist ein richtiges Arbeitstier - DANKEButterstulle ist ein richtiges Arbeitstier - DANKEButterstulle ist ein richtiges Arbeitstier - DANKE
ich hab nochmal eine Frage zum Script.
Wenn ich jetzt mehreren Usern verschiedene Usernamen und Passwörte zuweisen möchte, wie erweitere ich mein login.php um dies zu erreichen?
Muß ich die Passwortabfrage um ein "elseif" oder so erweiter?
Hab schon nach meinen bescheidenen Kenntnissen einige Varianten durchgespielt, komme aber nicht zum gewünschten Ergebniss.
Danke schonmal,
Butterstulle
Butterstulle ist offline   Mit Zitat antworten
Alt 01.02.2006, 15:41   #9
TP-Greis
 
Benutzerbild von Boris
 
Registriert seit: Mar 2001
Ort: Berlin, Germany
Boris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKEBoris ist ein richtiges Arbeitstier - DANKE
Am praktischten bei mehreren Usern wäre es, diese in einer MySQL Datenbank zu speichern. Beim einloggen checkst du dann, ob dieser User in der DB existiert oder nicht - und handelst entsprechend.
__________________
My software never has bugs. It just develops random features ...

» DevShack - die Website des freien Webentwicklers Boris
Boris ist offline   Mit Zitat antworten
Alt 01.02.2006, 17:02   #10
TP-Veteran
 
Benutzerbild von Butterstulle
 
Registriert seit: Jun 2002
Ort: Hamburg Altona
Butterstulle ist ein richtiges Arbeitstier - DANKEButterstulle ist ein richtiges Arbeitstier - DANKEButterstulle ist ein richtiges Arbeitstier - DANKEButterstulle ist ein richtiges Arbeitstier - DANKEButterstulle ist ein richtiges Arbeitstier - DANKEButterstulle ist ein richtiges Arbeitstier - DANKE
Zitat:
Zitat von Boris
Am praktischten bei mehreren Usern wäre es, diese in einer MySQL Datenbank zu speichern. Beim einloggen checkst du dann, ob dieser User in der DB existiert oder nicht - und handelst entsprechend.
Ok, die Logik dahinter leuchtet ein. Nur jetzt beginnt immer mein Problem.
Wie setzte ich dies in Php um?
Am Beispiel des tollen Workshop würde dies bedeuten, wo beginne ich in die DB meine Daten einzutragen?
Wieviele Tabellen brauche ich?
Ich sollte noch dazu sagen, das ich viele Php Tutorials vom Ansatz verstehe, aber auch hier an den transferleistungen scheitere.
Aber danke schonmal für den Ansatz
EDIT
Im Endeffekt dreht sich das bei mir um ca. 10 user, lohnt hier schon der Einsatz einer Datenbank?
Butterstulle ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik > Traum-Scripts
Members Area Members Area
« Umgang mit Mac-Dateien und Zeilenende | Larsens Gästebuch 1.0 Enterprise Edition RC1 ALPHA Stable »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine 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
Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:52 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



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

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