Include-Dateien sicher speichern/schützen

suntrop

Erfahrenes Mitglied
Hallo,

ich habe ein kleines Webtool erstellt, in das sich ein User einloggen muss. Beim Login setzte ich auf die Auth Klasse des PEAR Projekts.

Das Tool besteht aus drei Dateien die ein Nutzer aufrufen kann, die im Root-Ordner liegen. Diese drei checken alle, ob der Nutzer sich eingeloggt hat, wenn nicht, dann werden er zur Loginseite gelenkt.


Soweit so gut. Jedoch habe ich in verschiedenen Unterordner Dateien (z.B. /lib/php/db.inc.php, /lib/php/send_newmail.inc.php, /lib/php/save_new_data.inc.php etc.).

Diese werden alle über require_once() eingebunden und deshalb haben sie keine entsprechende Prüfung des Logins. Theoretisch könnte jemand also zu domain.com/lib/php/send_newmail.inc.php gehen und der Code darin würde ausgeführt.

Die meisten Dateien würden mit einem Fatal Error abbrechen, da sie selber wieder einige require_once() Funktionen in sich tragen und die Pfade dann nicht mehr stimmen.
Sicherheit ist aber was anderes ;-)

Ich bin noch recht neu in der PHP-Programmierung und weiß auch nicht wie ich es besser machen könnte. Lese zwar einiges über Sicherheit und PHP, jedoch ist mir meine aktuelle Situation noch nicht literarisch begegnet.

Ein Notbehelf mit einer .htaccess & .htpasswd hat wider erwarten auch nichts genützt, selbst intern wird wohl nach dem Passwort gefragt.

Habt ihr einen Tipp für mich? Was kann ich verbessern?
Gibt es die Möglichkeit die Dateien oberhalb des Root-Verzeichnisse zu speichern, dass die Scripte aber noch darauf Zugriff haben? Wie macht der PHP-Profi das? Wo die Dateien speichern und schützen?

Schönen Dank für eure Hilfe.


Grüße
suntrop
 
danke drucko.

Das ist ja genau die gleiche Aufgabe vor der ich auch stehe :)

Habe ich leider nicht gefunden.
 
Du kannst durchaus mit .htaccess arbeiten, wenn der Server es erlaubt. Blocke einfach jeglichen Zugriff, eine Passwort-Abfrage brauchst Du nicht.
So kann man nicht mehr direkt auf die Dateien zugreifen, da aber include() und require() ueber das Dateisystem laufen werden diese von dem .htaccess-Schutz nicht beeinflusst.
 
Oder du machst es anders:

rootdatei/bootstrap: define('ROOT', '/user/bin/usw');

und in jeder phpdatei die nicht alleine aufgerufen werden darf ganz oben:

<?php if(!defined('ROOT')){die('No direct call allowed')}

gibt auch andere möglichkeiten aber so haben es würde ich sagen die meisten neben .htaccess deny for all ;)
 
Danke für die Antworten.

Ich glaube ich setzte auf die .htaccess Variante. Das scheint mir am schnellsten und einfachsten zu sein.

Für die Zukunft merke ich mir mal den Tipp von suf*****.


Grüße
suntrop
 
Zurück