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 existiert

    aber 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 angezeigt

    was 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 existiert

    Dann überleg dir mal, was bei
    www.domain.tld/index.php?page=../passwd
    passiert 🙄

    Allgemein 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
    passiert 🙄

    Allgemein 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 😃


Anmelden zum Antworten