Siggi: Der Türsteher für php-Dateien

Hallo,

Ich arbeite gerade an einem Projekt und irgendwie frage ich mich bei jedem Projekt erneut nach meinem Programmierstil.

Diesmal habe ich folgendes vor und möchte euch bitten diese Methode auf Sicherheit zu bewerten.

Ich prüfe $_SERVER["REDIRECT_URL"] und werte den Inhalt auf Kompatibilität.

meinprojekt.de/
=> leer (Wenn Leer dann Startseite)

meinprojekt.de/anything.htm
=> anything.htm

Überprüfe anything.htm in der Datenbank

anything.htm exisitert

<? include(anything.inc.php); ?>

Also wenn die angefragte Seite Existiert kann sie auch angezeigt werden. Es könnte ja auch sein das jemand

meinprojekt.de/ich_will_dich_hacken

eingibt und dann passiert folgendes

=> ich_will_dich_hacken

Überprüfe ich_will_dich_hacken in der Datenbank

ich_will_dich_hacken exisitert nicht

<? die("Fehler"); ?>

..Soweit, so gut!

Jetzt geht es mir um die Sicherheit der includierten, tatsächlich existierenden Dateien wie zB die anything.inc.php.
Die kann man, wenn man es herausgefunden hat, direkt aufrufen.
Also dachte ich mir einen Türsteher einzubauen.
Und zwar in die Hauptdatei index.php, die alle includes (Somit auch functions.inc.php und Die Seiteninhalte eben) aufruft.

.htaccess:
----------
ErrorDocument 404 /absolut/index.php

index.php:
----------
<?
...
DEFINE(SECURITY,1);
...
include("functions.inc.php"); # Für Funktionen
include("redirect.inc.php");  # Für die Interpretation von .htaccess
...
include($ergebnis_der_auswertung);
?>

anything.inc.php
----------------
<?
if(SECURITY == 0) die("Soo kommst hier nicht rein!");
print "Yuhu";
?>

Der Hacker kann also eingeben was er will

anything.inc.php?was_auch_immer=es_geht_gar_nichts

Wenn diese Include-Datei jedoch über index.php bzw. über .htaccess aufgerufen wird klappt es.
auch das aufrufen von Inject-Variablen wird damit unterbunden
zB. meinprojekt.de/uebers_menue_aufgerufen&variable=wasauchimmer funktioniert nicht!

Was haltet Ihr von dieser Methode? Fraglich?, Bekannt?, Sicher?

Danke Siggi

  1. Ähm das kann man eigentlich auch mit htaccess lösen, oder :-) ?

    Wie kann ich mit htaccess nur *inc.php* Dateien Sperren?

    Siggi

    1. Wie kann ich mit htaccess nur *inc.php* Dateien Sperren?

      Habs schon habs schon:
      <FilesMatch .inc.php$>
      deny from all
      </FilesMatch>
      :-)

  2. echo $begrüßung;

    Jetzt geht es mir um die Sicherheit der includierten, tatsächlich existierenden Dateien wie zB die anything.inc.php.
    Die kann man, wenn man es herausgefunden hat, direkt aufrufen.

    Alles was nicht aufgerufen werden soll gehört nicht unterhalb des DocumentRoot abgelegt. In der Praxis ist das aber nicht immer realisierbar. Wenn du bei deinem Provider für die Domains Unterverzeichnisse unterhalb deines Kundenverzeichnisses anlegen kannst, und das DocumentRoot der Domain(s) auf so ein Unterverzeichniss zeigen lassen kannst, kannst du nun ein weiteres anlegen, auf das keine Domain zeigt. In dem kannst du nun Dateien ablegen, die nicht über das Web erreichbar sind. Bietet der Provider eine solche Möglichkeit nicht an, kannst du wenigstens noch ein Verzeichnis anlegen und den Zugriff darauf verbieten. Somit hast du einen Platz, an dem du die zu inkludierenden Dateien ablegen kannst, ohne dass sie jemand direkt aufrufen kann.

    echo "$verabschiedung $name";