Der Türsteher für php-Dateien
Siggi
- programmiertechnik
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
<? 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
<? 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
Ähm das kann man eigentlich auch mit htaccess lösen, oder :-) ?
Wie kann ich mit htaccess nur *inc.php* Dateien Sperren?
Siggi
Wie kann ich mit htaccess nur *inc.php* Dateien Sperren?
Habs schon habs schon:
<FilesMatch .inc.php$>
deny from all
</FilesMatch>
:-)
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";