Ankündigung

Einklappen
Keine Ankündigung bisher.

GET und Sicherheit

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

  • GET und Sicherheit

    Hallo!

    Bin php-anfänger, brauche nur ein paar php funktionen und habe nicht die Zeit mich komplett einzuarbeiten. Jetzt habe ich eine Frage zur Sicherheit in Verbindung mit GET. Vielleicht hat jemand kurz Zeit und Lust mir zu antworten.

    Habe eine ziemlich lange Auflisten von Bildern und beim Anklicken eines Bildes wird eine xy.php aufgerufen und eine Variable mitübergeben. Die Variable enthält den Namen der dem Bild entsprechenden Textdatei deren Inhalt dann an bestimmten Stellen in der aufgerufenen xy.php angezeigt wird. Also nichts mit Passwörtern oder so.

    Gibt es dabei gravierende Sicherheitsprobleme (z.B.Manipulation von außen - die angesprochenen Daten liegen ja nur auf meinem Server - oder könnte jemand den Inhalt der Textdateien z.B. ändern ? )

    Vielen Dank !


  • #2
    Und wenn wir jetzt ja sagen, was würdest Du dann ohne Wissen um PHP- und Servertechniken damit anfangen wollen?
    --

    „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


    • #3
      Dann würde ich eben die Zeit aufwenden müssen. Hatte gehofft, Antworten zu bekommen nach denen ich eventuelle Sicherheitsprobleme bewerten bzw. einschätzen kann (nach meinem Maßstab).

      Kommentar


      • #4
        Du musst die GET Werte überprüfen bevor du mit ihnen weiterarbeitest.
        Kleines bsp:
        url.com?id=1234
        PHP-Code:
        if(is_numeric($_GET['id'])) {
          
        //OK
        } else {
          
        //was auch immer...

        Kommentar


        • #5
          Hatte gehofft, Antworten zu bekommen nach denen ich eventuelle Sicherheitsprobleme bewerten bzw. einschätzen kann (nach meinem Maßstab).
          Auf Basis Deiner obiegn Information kann man gar nichts sagen.
          --

          „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


          • #6
            Zitat von BlackSpirit Beitrag anzeigen
            Du musst die GET Werte überprüfen bevor du mit ihnen weiterarbeitest.
            Kleines bsp:
            url.com?id=1234
            PHP-Code:
            if(is_numeric($_GET['id'])) {
              
            //OK
            } else {
              
            //was auch immer...

            Danke Blackspirit. Die Variablen überprüfe ich - bin aber total verunsichert, ob das ausreicht. Bin totaler Neuling und weiß nicht, auf was man mit z.B. ... anzeige.php?infos=xyz.txt& ... ungewollt Zugriff gewährt (nach all den Horrormeldungen die man so liest).

            Kommentar


            • #7
              Das kann ich dir nicht sagen da ich dein Script nicht kenne und ohne Grundlagen wird das nix.

              Kommentar


              • #8
                Zitat von nikosch Beitrag anzeigen
                Auf Basis Deiner obiegn Information kann man gar nichts sagen.
                Sorry Nikosch - ich will nicht nerven. So diffus wie meine Frage rüberkam, so diffus ist mein Wissen über php. Was ich wissen wollte ist - kann allein schon eine Anweiseung wie z.B. anzeige.php?info=xyz.txt& ausreichend sein, daß jemand dadurch "leichter" z.B. an mein Zugangspasswort zum Provider kommt oder meine Daten ändern kann.

                Kommentar


                • #9
                  Zitat von BlackSpirit Beitrag anzeigen
                  Das kann ich dir nicht sagen da ich dein Script nicht kenne und ohne Grundlagen wird das nix.
                  Hallo Blackspirit !

                  Ich rufe in einer reinen html-site Folgendes auf:

                  <a href="anzeige.php?haus=c275.txt&">
                  <img src="images/c275/bild1kl.jpg" width="125" height="96"
                  class="smallbord" alt=""></a>


                  Anzeige.php ist auch reines HTML - mit zwei php-Abschnitten:

                  Dateiinhalt in Array lesen

                  <?php
                  $datei = $_GET["haus"];
                  $array = file($datei);
                  ?>

                  und Dateiinhalt an den entsprechenden Stellen ausgeben:

                  <div id="content">
                  <h2>
                  <?php
                  echo $array[0];
                  ?>
                  </h2>
                  <ul>
                  <li><span class="fett">Lage:</span>
                  <?php
                  echo $array[1];
                  ?>
                  </li>
                  <li><span class="fett">Entfernung zum Meer:</span
                  <?php
                  echo $array[2];
                  ?>
                  </li>
                  usw.

                  Mehr brauche ich nicht, will nur die jetztige Site (komplett in html gemacht) etwas flexibler und für mich wartungsfreundlicher gestalten. Bis jetzt habe ich ca. 250 Artikel zum Anklicken und somit auch 250 Seiten - also für jeden Artikel eine Seite.


                  Danke für Deine Mühe !

                  Kommentar


                  • #10
                    Ja, das kann reichen. Durch Cross site scripting. Dein obiges Beispiel kann auch wunderbar Systemdateien auslesen.
                    --

                    „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


                    • #11
                      Wie bereits gesagt Sicherheit = 0
                      Die Variablen überprüfe ich
                      Also wenn du das überprüfen nennst...
                      PHP-Code:
                      $datei $_GET["haus"]; 
                      Ich würde dir eher empfehlen:
                      anzeige.php?haus=275

                      PHP-Code:
                      if(is_numeric($_GET["haus"])) {
                        if(
                      file_exists("c".$_GET["haus"].".txt")) {
                          
                      //....
                        
                      }

                      Kommentar


                      • #12
                        is_numeric lässt mehr durch als nur zahlen, verwende lieber ctype_digit

                        PHP: ctype_digit - Manual

                        Kommentar


                        • #13
                          ein whitelisting von zeichen, welche im dateinamen vorkommen dürfen sollte reichen. Andernfalls kann jemand ungehindert passwortdateien o.ä. auslesen, weil bei ungefilterten dateinamen auch beispielsweise ein "../" vorkommen könnte, mit dem man schön durch die festplatte navigieren kann.
                          Ausserdem würde ich die dateiendung fix angeben.

                          also quickndirty:
                          PHP-Code:
                          $safeFilename preg_replace('/[^A-Za-z0-9_\-]+/'''$_POST['infos']) . '.txt'
                          request wäre dann:
                          abd.php?infos=xyz
                          mit $safeFilename kannst du dann weiterarbeiten und die datei laden etc....

                          Kommentar


                          • #14
                            An dein Passwort kommt man im Normalfall damit nicht. Ebenfalls kann man die Inhalte der Dateien nicht ändern oder Datein löschen.

                            Wie schon angesprochen, solltest du aber einiges in dein Script implementieren, um diese Sicherheit auch wirklich zu erreichen:

                            1. Alle zu lesenden Dateien in ein Verzeichnis (evtl. UZnterverzeichnisse)
                            2. Verhindern, das im Dateisystem nach oben gegangen wird:
                            PHP-Code:
                            $pfad str_replace('..'''$pfad); 
                            3. Wenn möglich, die Dateiendung oder einen Teil des Dateinamens scriptseitig vorgeben:
                            (Auch hier vorher '..' entfernen (siehe Punkt 2)!)
                            PHP-Code:
                            // z.B.
                            include 'info_img_'.$imgId.'.txt'

                            Kommentar


                            • #15
                              @jw-lighting: Diese Tipps sind zu allgemein und damit gefährlich. Ein str_replace('..' reicht bspw. nicht aus. Selbiges gilt für eine statische Dateiendung.
                              --

                              „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

                              Lädt...
                              X