Ankündigung

Einklappen
Keine Ankündigung bisher.

Ist meine Navigation sicher?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Nabla
    hat ein Thema erstellt Ist meine Navigation sicher?.

    Ist meine Navigation sicher?

    Hallo,
    ich bin gerade dabei eine zentrale Klasse für meine Homepage zu basteln. Dabei interessiert mich natürlich auch das Thema Sicherheit. In einer vorhergehenden Version habe ich meine Links in einer Whitelist abgelegt und so ein Maß an Sicherheit geschaffen. Nun habe ich das alles etwas anders geregelt. Meine zentrale Klasse durchsucht meinen content-Ordner und erstellt daraufhin eine Navigation. Der Zugriff auf den Content erfolgt dann folgendermaßen:

    PHP-Code:
    ...
    file_get_contents('content/'.$ContentPath.'.inc');
    ... 
    Aus dem Bauch heraus würde ich jetzt meinen, dass es schon sicher gegen das einschleußen fremden Codes ist, da ich ja eine Einschränkung hinsichtlich des Ordners vornehme und zusätzlich noch eine Dateiendung vorgebe.

    Stimmt meine Einschätzung oder liege ich da falsch? Danke für schonmal für konstruktive Antworten.

    mfg Nab

  • skandler
    antwortet
    Was aber auch noch eine schnelle Lösung mit einer Whitelist wäre: Du gibst den Dateien einfach eine Anfangskennung.

    z.B.: cnt_datei1.php, cnt_datei2.php, cnt_datei3_php

    Somit bräuchtest du keine manuellen Einträge in der Whitelist vornehmen. Fängt die zu includende Datei dann nicht mit cnt_ an, bricht das Script ab und bindet die Datei nicht ein. Somit könnte man auch verhindern, dass ungewünschter Dateien eingebunden werden.

    Einen Kommentar schreiben:


  • skandler
    antwortet
    Oopops.

    Danke für den Hinweis. Hab´s ausgebessert.

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Und was magic_quotes betrifft, sollte man sich vielleicht diesen kurzen Hinweis zu Herzen nehmen:

    PHP: Magic Quotes - Manual
    Dann würde ich gleich ergänzen, das HTTP_GET_VARS genauso veraltet sind.

    Einen Kommentar schreiben:


  • skandler
    antwortet
    PHP-Code:
    include('/var/www/web1/'.$_GET['content'].'.inc'); 
    Und dann überprüfen, ob die Variable Punkte enthält. Somit kann man weder die Dateiendung verändern noch kommt man aus dem Verzeichniss /var/www/web1/ heraus.

    Und was magic_quotes betrifft, sollte man sich vielleicht diesen kurzen Hinweis zu Herzen nehmen:

    http://php.net/manual/de/security.magicquotes.php

    Einen Kommentar schreiben:


  • Nabla
    antwortet
    Guten morgen und danke für die Antwort,

    Den Tipp mit !isset nach vorne bringen hab ich gleich umgesetzt und ist auch verständlich.

    Ich habe gelesen, das so eine Funktion für eine komplexe/tiefverschachtelte Dateistruktur wohl eher ungeeignet ist. Ich lese eine Struktur ein, welche maximal zwei Ebenen hat (also worsed case: content/Unterordner/Datei.inc). Ein anderer Ansatz war, dass meine Seite nur ein Datenbank-update macht, wenn ich eine neue Seite hinzufüge. Die Überprüfung findet dann mit der Datenbank statt, was wohl eine weitaus bessere performance bietet oder?

    Zur Dateiendung: Der Inhalt der *.inc Dateien ist zwar nur HTML aber ich hab nicht daran gedacht, dass ein Zugriff direkt drauf erfolgen kann. Werd ich auch ändern, danke für den Tip.

    mfg Nab

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Z.B. das Filesystemzugriffe in dieser Größenordnung total inperformant sind.

    !isset($Section) sollte sinnvollerweise immer die erste Bedingung einer OR-Verknüpfung sein.
    .inc ist übrigens eine sehr schlechte Extension, weil sie nicht PHP-geparst wird und, sobald direkter Zugriff auf das Verzeichnis möglich ist, das File gelistet, statt vorher durch PHP verbeitet wird.

    Einen Kommentar schreiben:


  • Nabla
    antwortet
    Trotz der Gefahr hier gesteinigt zu werden möchte ich trotzdem noch ein Frage zu meiner Navigation stellen. Ich habe folgenden Ansatz. Bevor ich den jeweiligen content lade überprüfe ich, ob die Datei im Verzeichnis überhaupt existiert. Dass schaut dann so aus:

    PHP-Code:
        public function ShowSite($Section)
        {
        
            
    /* Bevor Section-Inhalt weiter übergeben werden kann, muss die Existenz im Content-Ordner 
            oder darunter überprüft werden!*/
            
    $DirArray $this->ScanDirectory('content/');
            if(!
    in_array($Section.'.inc'$DirArray) || !isset($Section))
            {
                
    $Section '1_Home';    
            }
            echo 
    $this->BuildStructure($Section);
        } 
    PHP-Code:
        Private function ScanDirectory($Path)
        {
            
    $ModifiedArray = array();
            
    $DirArray scandir($Path);
            
    /* Neuen array erstellen und alle werte außer . und .. übergeben */            
            
    foreach($DirArray as $Entry)
            {
                if(!((
    $Entry == ".") || ($Entry == "..")))
                {
                    
    $ModifiedArray[] = $Entry;             
                }        
            }
            return 
    $ModifiedArray;
        } 
    Was haltet ihr davon? Meine Idee war es eben eine whitelist zu erstellen, welche ich nicht händisch erweitern muss, sondern von meiner Klasse selbst erzeugt wird. Mit der Überprüfung "sperre" ich ja den user sozusagen im Content-Ordner ein. Übersehe ich wieder was?

    mfg Nab

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    -
    file_exists
    macht überhaupt keinen Sinn. Wenn man die Datei so includen kann, wird file_exists auch immer TRUE zurückgeben.
    - ereg ist veraltet

    Einen Kommentar schreiben:


  • Nabla
    antwortet
    Natürlich lese ich eure Beiträge und wende sie auch an. So hab ich tklausl's Tipp umgesetzt und mache jetzt file_exists()-abfrage. Gerade eben schau ich wie ich diese Suchstring-Abfrage realisieren kann (hab da gerade was mit ereg gefunden). Nichts desto trotz darf ich doch aus Interesse weitere Fragen zu dem Thema stellen, oder?

    Nachtrag:

    Leider sind meine Kenntnisse in PHP noch nicht sooohoo gut und deswegen kann ich diese Aussage von dir Nikosch nicht so gut einschätzen:

    Aha. Ich würde ja behaupten, der Ausdruck matcht auch a0872-8897*&%^&^$#@.%(^*h.

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Ihr meint also mit preg durchsuchen oder wie?
    tkausl meint das und ich habe geschrieben, dass das keine gute Idee ist. Liest DU unsere Beiträge?

    Einen Kommentar schreiben:


  • Nabla
    antwortet
    Sorry wenn ich dich vergrault habe, ich möchte es ja nur verstehen. Für Tipps bin ich sehr dankbar und werd ich auch beherzigen. Entschuldigung wenn es anders rüberkam.
    Schönen abend noch.
    mfg Nab

    Einen Kommentar schreiben:


  • Chriz
    antwortet
    Zitat von Nabla Beitrag anzeigen
    Ihr meint also mit preg durchsuchen oder wie?

    Also ich hab jetzt versucht auf andere Dateien als *.inc zuzugreifen. Klappt aber nicht.

    ich übergebe ja anstatt 'home.inc' nur den Ausdruck 'home'.

    Der eigentliche Pfad wird ja hier erst erstellt:
    PHP-Code:
    file_get_contents('content/'.$ContentPath.'.inc'
    Oben steht doch wie du es machen musst. Andere, und damit meine ich Hacker sind da vielleicht - sorry - schlauer als du. Nur weil du es nicht hinbekommst heißt das garnichts. Evtl. ist bei dir magic_quotes an, dann hast du sowieso Geburtstag und kannst dich zurücklehnen <- nicht ernst gemeint. Mit PHP 6 fliegt dir dann wieder alles um die Ohren. Sehe nicht ein, warum du es nicht gleich richtig macht, wie steht ja hier. Scheinbar wieder eine gewisse Beratungsresistenz, weshalb ich mich dann auch aus dem Thread verabschiede.

    Einen Kommentar schreiben:


  • Nabla
    antwortet
    Ihr meint also mit preg durchsuchen oder wie?

    Also ich hab jetzt versucht auf andere Dateien als *.inc zuzugreifen. Klappt aber nicht.

    ich übergebe ja anstatt 'home.inc' nur den Ausdruck 'home'.

    Der eigentliche Pfad wird ja hier erst erstellt:
    PHP-Code:
    file_get_contents('content/'.$ContentPath.'.inc'

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    Aha. Ich würde ja behaupten, der Ausdruck matcht auch a0872-8897*&%^&^$#@.%(^*h.

    Einen Kommentar schreiben:

Lädt...
X