Dynamische Webseite - Sicherheit
-
ok,
wie aus meinem vorherigen Posting Dynamische Webseite - Aufbau hervorgeht,
werde ich meine Webseite folgendermassen (vereinfacht) aufbauen:index.php
{header} // menü <a href='index.php?page=produkte'>Produkte</a> ... <a href='index.php?page=kundenbereich'>Kundenbereich</a> // content include('page/'.$page.'.php'); {footer}
- wobei denn je nachdem was im Menü geklickt wurde unter content aus dem Verzeichniss 'page', nachgeladen wird, z.B. /page/kundenbereich.php
- alle Unterpages sind dann nur mit Inhalt gefüllt ohne Header, Menü, Footer, etc...
Ok jetzt die Frage der Sicherheit:
hier wird zwar so was nicht gehen:
www.domain.tld/index.php?page=/passwd,
weil dann /page/passwd.php nicht existiertaber wenn ich irgendwelche Unterpages nur für eingeloggten User zugängig machen will (z.B. page/kundenbereich.php)
dann könnte ich zwar am Anfang von geschützten Seinten so was machen
wie bei diesem Artikel:page/kundenbereich.php
include('auth.php'); { geschützer content }
dann kann man es doch ganz leicht hacken oder ?
z.B. jemand includet auf seiner externer seite meine 'page/kundenbereich.php'
includierung von auth.php wird ignoriert, weil die datei dann nicht vorhanden ist in seinem relativen verzeichniss es kommt zwar eine warnung, aber danach wird ja trotzdem mein geschützter content bei dem angezeigtwas kann man dagegen machen ?
-
Sergius schrieb:
hier wird zwar so was nicht gehen:
www.domain.tld/index.php?page=/passwd,
weil dann /page/passwd.php nicht existiertDann überleg dir mal, was bei
www.domain.tld/index.php?page=../passwd
passiertAllgemein gilt: Wenn schon so eine Lösung, dann ausschließlich(!!) mit Whitelist-Abgleich!
-
árn[y]ék schrieb:
Dann überleg dir mal, was bei
www.domain.tld/index.php?page=../passwd
passiertAllgemein gilt: Wenn schon so eine Lösung, dann ausschließlich(!!) mit Whitelist-Abgleich!
finde passiert nichts, da bei (oben geschrieben):
include('page/'.$page.'.php');wird noch auf jeden fall .php angehängt
also wird daraus: 'passwd.php'. oder ?
-
Falsch. Ein potentieller Angreifer braucht schlicht und ergreifend ein Nullbyte an das Ende seiner via Parameter injizierten Zeichenkette stellen, dann ist dein '.php' schneller weg, als dir lieb ist!
Meine Empfehlung: Schaffe dir eine gute Lektüre zu dem Thema an.
Und nimm einfach einen gutgemeinten Rat an. Es werden nicht umsonst nahezu überall Whitelists verwendet, wo es kritisch wird. Und ja, es wird immer kritisch, wenn man ein öffentlich zugängliches Script cracken kann.
Allgemein gilt: Bei PHP kann man nicht paranoid genug sein. Dass trifft zwar auf jeden Bereich zu, der mit Sicherheit zu tun hat, aber bei PHP erfordert es ein erhöhtes Grund-Know-How, um zu wissen, wo die Knackpunkte überhaupt liegen.
-
Hallo,
Ich habs zwar selber noch nicht gelesen aber das Buch PHP-Sicherheit soll ganz gut sein.
Ist vielleicht einen Blick wert
-
Du könntest auch die Funktion basename() auf $page anwenden, um sowas zu verhindern.
-
árn[y]ék schrieb:
aber bei PHP erfordert es ein erhöhtes Grund-Know-How, um zu wissen, wo die Kackpunkte überhaupt liegen.
PFUI!
-
Ups