PHP Dateischutz

PatrickB

Well-known member
ID: 137508
L
24 April 2006
496
13
Hallo,

ich möchte meine Dateien die ich mittels include einbinde, so schützen, dass sie nur von einer bestimmten Datei aufgerufen werden können (also so, dass ich die include Datei nicht alleine aufrufen kann).

Das hat bis jetzt auch wunderbar geklappt indem ich in der Hauptdatei eine Konstante definiert habe und dann abgefragt habe ob die Konstante den geforderten Wert hat. Ansonsten wird abgebrochen.

Jetzt möchte ich die Datei aber über Ajax aufrufen. Auf meinem einen Webserver klappt das auch noch (PHP Version 4.4.4). Aber auf meinem anderen (PHP Version 5.3) klappt das irgendwie nicht mehr.

Liegt das jetzt an der Version von PHP oder an mir? Und wie kann ich die Datei weiterhin schützen?

Gruß Patrick
 
Das wird an der neuen Namespace -Unterstützung von php 5.3 liegen. Damit habe ich mich aber noch nicht näher befasst, da musst Du Dich nochmal belesen.
 
Aber auf meinem anderen (PHP Version 5.3) klappt das irgendwie nicht mehr.
Aha, eine sehr genaue Problembeschreibung :roll:
ich möchte meine Dateien die ich mittels include einbinde, so schützen, dass sie nur von einer bestimmten Datei aufgerufen werden können (also so, dass ich die include Datei nicht alleine aufrufen kann).
Ich nehme an, du bist der einzige, der Zugriff auf die Files hat? - wäre ja schlimm, wenn nicht.
D.h. du bestimmst doch, wer welches File inkludiert, von daher kann mit einer include-Anweisung schon mal nichts schiefgehen.

Jetzt könnte noch ein, eigentlich nur für die Einbindung vorgesehenes PHP-File direkt via Browseranfrage aufgerufen werden. Das unterbindest du, indem du Dateien, die nur zu Include-Zwecken existieren, schon per Webserver so konfigurierst, dass sie nicht von außen erreichbar sind.

Dann kannst du dir das komische Konstanten-Spielchen sparen ;)
 
Dann kannst du dir das komische Konstanten-Spielchen sparen ;)
Im Notfall (!) ist das aber halt auch eine Behelfslösung ... insbesondere bei Software, die im etwas größeren Stil an Dritte veräußert wird, kann man ja nicht per se eine Unterbringung von Daten außerhalb des Docroots voraussetzen ;).

PHP:
// z.B. index.php
define("INCLUDE_ACCESS", true);
require_once("./include/foobar.inc.php");
PHP:
// foobar.inc.php
defined("INCLUDE_ACCESS") || exit;
 
Im Notfall (!) ist das aber halt auch eine Behelfslösung ...
Das hat er ja im Moment jetzt, so wie ich das verstanden habe.

Genau das will ich. Und wie mache ich das nun?
Bring die Dateien, die nicht von außen zugänglich sein sollen, in ein Verzeichnis, dass nicht über den Webserver ausgeliefert wird.

Beispiel:

  • /var/www/yourproject/public/ -> https://www.example.com/
  • /var/www/yourproject/private/ -> (nicht via Webserver zugänglich)
PHP:
// /var/www/yourproject/public/index.php
include("../private/functions.php");

/* ... */
$page->output();
PHP:
// /var/www/yourproject/private/functions.php

/* alles hier ist geschützt */