Ankündigung

Einklappen
Keine Ankündigung bisher.

Ist meine Navigation sicher?

Einklappen

Unconfigured Ad Widget

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

  • 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


  • #2
    Daran ist garnichts sicher. Mit ../ kannst du im Pfad zurücklaufen und mit \0 kannst du die Dateiendung abschneiden.
    "Mein Name ist Lohse, ich kaufe hier ein."

    Kommentar


    • #3
      Dass man mit \0 die Dateiendung abschneiden kann wusste ich noch nicht. Also auf jedenfall ne whitelist erstellen.


      mmmh... dass mit \0 raff ich nicht ganz. Wie schaut das denn aus, wenn du beispielsweise anstatt content/Home.inc die Datei test/test.txt einbindest?

      Meine Struktur ist die folgende: index.php?section=Home
      Abändern auf : index.php?section=../test/test.txt

      Und meine wichtigste Frage kann man so fremden code einschleusen?

      Kommentar


      • #4
        entweder whitelist oder den string durchsuchen.
        Zitat von nikosch
        Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

        Kommentar


        • #5
          Zitat von Nabla Beitrag anzeigen
          mmmh... dass mit \0 raff ich nicht ganz. Wie schaut das denn aus, wenn du beispielsweise anstatt content/Home.inc die Datei test/test.txt einbindest?
          ../test.txt%00


          Fremden Code weiß ich jetzt nicht, vermutlich eher nicht, da du damit zumindest meines Wissens nach keine URL reinbacken kannst. Aber du kannst damit eben alle Dateien einbinden, an die PHP eben so rankommen kann. Damit kannst du dir das MySQL-Passwort holen, damit einen Adminzugang, damit vielleicht neue Dateien hochladen/anlegen und damit auch den kompletten Server.
          "Mein Name ist Lohse, ich kaufe hier ein."

          Kommentar


          • #6
            oder den string durchsuchen
            was dem Blacklisting und damit i.A. dem falschen Ansatz entspricht.
            --

            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


            --

            Kommentar


            • #7
              Zitat von nikosch Beitrag anzeigen
              was dem Blacklisting und damit i.A. dem falschen Ansatz entspricht.
              einmal folgenden suchstring drüberlaufenlassen:

              /[a-zA-Z0-9_]/
              und nen file_exists und das ding is sicher
              Zitat von nikosch
              Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

              Kommentar


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

                „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                --

                Kommentar


                • #9
                  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'

                  Kommentar


                  • #10
                    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.
                    "Mein Name ist Lohse, ich kaufe hier ein."

                    Kommentar


                    • #11
                      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

                      Kommentar


                      • #12
                        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?
                        --

                        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                        --

                        Kommentar


                        • #13
                          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.

                          Kommentar


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

                            „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                            Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                            --

                            Kommentar


                            • #15
                              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

                              Kommentar

                              Lädt...
                              X