Passwortschutz + Includes

Precog

Erfahrenes Mitglied
Hi,

ich habe einen passwortgeschützten Bereich anhand dieses Tutorials gebaut und stehe jetzt vor einem Problem:

Der Bereich, den ich schützen will, funktioniert folgendermaßen: Ich habe eine admin.php , die sozusagen als Gerüst dient, und in die der Inhalt (in Form von Unterseiten) jeweils "includet" wird. Also über eine Variable die in der URL definiert wird.

Meine Frage: Wie schütze ich jede einzelne Seite am Besten? Ich könnte die Session natürlich einfach nur in der admin.php prüfen lassen, aber wenn ein User dann direkt eine Unterseite - also einen "Include" - aufruft, wird ihm diese ja angezeigt.

Wäre es sinnvoll, auf jeder einzelnen Unterseite - anstelle der admin.php - die Session prüfen zu lassen?
Oder sollte ich zB in der "checkuser.php" (die die Session prüft), eine Variable erstellen und dann vor jeden Include eine if (variable existiert nicht) {login.php} stellen (und die checkuser.php in der admin.php lassen)?

Vielen Dank für Tipps und Anregungen!
Precog.
 
Hallo,
du könntest z.B. an den Anfang jeder der einzubindenden Dateien
PHP:
if($_SERVER['SCRIPT_FILENAME'] != '/full/path/to/admin.php'){
die("Kein Direktaufruf bitte. Danke.");
// oder z.B. header("HTTP/1.0 401 Unauthorized");
}
schreiben. Sprich nur, wenn die Datei über die admin.php includet wird, wird das Script ausgeführt!

MfG
 
Eine andere Möglichkeit wäre, in der „admin.php“ eine Konstante zu definieren und die Existenz dieser in den anderen Skripten zu prüfen. Existiert sie nicht, wurde das Skript nicht über die „admin.php“-Skriptdatei aufgerufen. Beispiel:
PHP:
// admin.php
define('FOOBAR', true);
PHP:
if( !defined('FOOBAR') ) {
	// kein Aufruf über admin.php
}
Noch eine weitere Möglichkeit wäre, die Werte der Servervariable $_SERVER['SCRIPT_FILENAME'] und der magischen Konstante __FILE__ zu vergleichen:
PHP:
if( $_SERVER['SCRIPT_FILENAME'] == __FILE__ ) {
	// direkter Aufruf
}
 
hey,

danke für die schnelle Antwort!
Ich habs gleich mal ausprobiert und es war auch insofern erfolgreich, als dass ich die Unterseiten nicht mehr direkt aufrufen kann. Allerdings bekomm ich die Fehlermeldung auch wenn ich sie über die admin.php einbinde = ich bin also zu doof, den Pfad korrekt anzugeben. Könntest du mir damit nochmal helfen? ;)

Die Struktur sieht so aus:

admin.php
---/inc/
------/a/
-------seite1.php
-------seite2.php

usw.
wenn seite1.php in admin.php includet werden soll, sieht die Adresse ungefähr so aus:

HTML:
http://www.domain.de/admin/admin.php?inc=as1&variable2=sdf

Variable 2 (submenü) in der Adresse kann sich verändern, trotzdem soll immer seite1.php includet werden.

Danke für eure Mühe,
Precog

EDIT: Danke, Gumbo, hab deine Antwort gerade nicht gesehen. Ich probiere es mal eben aus!
 
Zuletzt bearbeitet:
Hi,

also über __FILE__ funktionierts auf jeden Fall.

Abe wie gebe ich den Pfad zur admin.php korrekt an? Wenn ich das über __FILE__ regel, kann ja theoretisch jeder, der den namen der Datei kennt, sie über seine eigene Seite includen und hat so Zugriff...

Und wie sicher ist die Regelung mit der Konstanten? Gibts da irgendwelche Vor- oder Nachteile?

Danke nochmal,
Precog
 

Neue Beiträge

Zurück