Schutz vor manuellem Aufruf

nickiquickie

Mitglied
Hallo,

ich weiss, dass es zu diesem Thema schon eine Menge Threads gibt. Hoffentlich gibts jetzt keine auf den Deckel. ;)
Ich möchte meine php-Dateien vor manuellem Aufruf schuetzen.
Die Methode mit .htaccess möchte ich nicht anwenden.
Gibt es andere Möglichkeiten?
Ich habe zum Beispiel das hier gefunden:
PHP:
if($_SERVER['PHP_SELF'] == str_replace($_SERVER['DOCUMENT_ROOT'],'',__FILE__))
die();
Verstehe aber den Sinn der str_replace-Funktion und den anschliessenden Vergleich nicht ganz.
Vielleicht gibt es ja noch andere Möglichkeiten. Kann man die aktuell aktive Session irgendwie verwenden?

Vielen Dank schonmal fuer eure Hilfe!
 
Was verstehst du unter "manuellem Aufruf"?

Falls du verhindern willst, dass jemand PHP-Skripte aufrufen kann, die eigentlich nur dazu gedacht sind, irgendwo includet zu werden, könntest du bspw. in allen Skripten, welche diese Skripte inkluden, eingangs eine Variable definieren.

In den zu inkludenden Skripten prüfst du dann die Existenz dieser Variable und brichst ab, falls sie nicht bekannt ist.

Eine andere Variante wäre eine Umbenennung dieser Skripte nach dem Schema
Code:
.htirgendeinname
da bei Apache-Servern(sofern dieser bei dir im Einsatz ist) auf namenlose Dateien, deren Endung mit ht beginnt, per HTTP nicht zugegriffen werden kann, hätte das ebenfalls den gewünschten Effekt.

Oder aber du platzierst alle Skripte, auf welche nicht per HTTP zugegriffen werden soll, oberhalb der DOCUMENT_ROOT.
 
Ich prüfe bei meinen Scripts meistens ob eine gewisse Variable oder Sessionvariable vorhanden ist.

PHP:
<?php if (!defined('projekt')) die('You can not access this file directly!'); ?>
oder
PHP:
<?php if (!isset($_SESSION["projekt"]) die('You can not access this file directly!'); ?>

diese Zeile kommt dann z.B an den Anfang sämtlicher PHP Files die included werden.
 
Zuletzt bearbeitet:
Was verstehst du unter "manuellem Aufruf"?

Falls du verhindern willst, dass jemand PHP-Skripte aufrufen kann, die eigentlich nur dazu gedacht sind, irgendwo includet zu werden, könntest du bspw. in allen Skripten, welche diese Skripte inkluden, eingangs eine Variable definieren.
Ja genau, ich will verhindern, dass die php-skripte durch Eingabe der entsprechenden URL in den Browser aufgerufen werden können.

In den zu inkludenden Skripten prüfst du dann die Existenz dieser Variable und brichst ab, falls sie nicht bekannt ist.
Ich habe eine Homepage mit Mitgliederbereich. Nachdem die User eingeloggt sind, können sie diverse Seiten im Menue auswählen. Diese Seiten werden alle in die index.php included. Es gibt aber eine Seite, die direkt in einem neuen Fenster aufgerufen wird. Da muss ich ja dann irgendwie die Variable mit uebergeben.
Wie mache ich das dann am geschicktesten? Die Session-ID in der URL mitgeben und die Variable vorher in der Session speichern, oder?

Oder aber du platzierst alle Skripte, auf welche nicht per HTTP zugegriffen werden soll, oberhalb der DOCUMENT_ROOT.
Kannst Du das mit DOCUMENT_ROOT nochmal kurz erklären? Warum ist oberhalb kein Zugriff auf dei Skripte möglich?

Danke!
 
Woher wissen die Leute den Namen des Scriptes? Die heißen hoffentlich nicht genau wie der Menüpunkt :)

Ansonsten siehe meine Lösung.
 
Woher wissen die Leute den Namen des Scriptes? Die heißen hoffentlich nicht genau wie der Menüpunkt :)

Ansonsten siehe meine Lösung.

Deine Lösung gefällt mir gut. Das ist genau das was ich gesucht habe. :)
Der Name der Seite, die ausserhalb des include-Bereichs geöffnet wird, ist komplett in der URL sichtbar.Leider auch der ganze Pfad...
Deshalb will ich ja umgehen, dass man diese manuell öffnen kann.
Natuerlich heissen die Seiten nicht genau wie der Menuepunkt. Aber bei einigen Seiten kann man ja erraten und ausprobieren. Daher sicherheitshalber der Schutz fuer alle Seiten.
 
Vielen Dank fuer eure Hilfe und die Tips! Habe wieder einiges gelernt.

Ich schuetze die Seite jetzt mit der Pruefung auf eine gesetzte Session-Variable.
Falls sie nicht gesetzt ist, wird die Seite nicht angezeigt.

PHP:
<?php if (!isset($_SESSION['angemeldet']) die('Diese Seite darf nicht direkt angezeigt werden!'); ?>
Vielen Dank Kahmoon!
 
Sicherer wäre es noch diese Variable auf einen bestimmten Wert (z.B einen Datumshash) zu prüfen als nur auf ihre Existenz.
 
Sicherer wäre es noch diese Variable auf einen bestimmten Wert (z.B einen Datumshash) zu prüfen als nur auf ihre Existenz.

Meinst Du sowas in der Art:
index.php
PHP:
 <?php $_SESSION['angemeldet']=time()+(5*60); ?>

fenster.php
PHP:
<?php 
$now = time();
if ( $_SESSION['angemeldet'] < $now ) die('Diese Seite darf nicht direkt angezeigt werden!'); ?>
 
Zurück