Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Sicherheitsproblem...

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Sicherheitsproblem...

    Hallo, ich arbeite zur Zeit an einem Spript, welches nicht von mir stammt aber komplett MIST ist!

    Das Teil hat gute 40.000 Zeilen Code und benötigt Register GLOBALS = ON!!!

    Nun wollte ich das Script sicherer machen, da es bereits auf einem Server läuft, und mir schwebt da folgendes for:

    foreach($_POST as $key => $val){
    $_POST[$key] = strip_tags($val);
    // NUN NOCH DIE GLOBALE $xyz (Name = $key)
    // MIT DER NEUEN $_POST[$key] ÜBERSCHREIBEN UND FERTIG
    }

    Die Frage ist nur wie??

    Wie kann ich eine globale Variable mit der Value aus den Array $_POST überschreiben...

    Steh im Moment auf der Leitung...

    Natürlich ist das keine Endlösung aber verschafft mir Zeit zum umarbeiten des Scripts.

    DANKE!


  • #2
    Ich versteh nicht ganz was du meinst, vielleicht sowas:

    PHP-Code:
    $$key $val

    Kommentar


    • #3
      Was ich meinte...

      Die Schleife druchläuft zB. $_POST['Kontakt_Form_Anrede'] und soll die GLOBALE $Kontakt_Form_Anrede mit dem Wert von strip_tags($_POST['Kontakt_Form_Anrede']) ersetzen...

      Geht das so:

      foreach($_POST as $key => $val){
      $_POST[$key] = strip_tags($val);
      $$key = $_POST[$key];
      }

      ??

      Kommentar


      • #4
        du willst also praktisch eine Abwandlung von PHP: import_request_variables - Manual machen?

        Kommentar


        • #5
          Dieses Test-Konstrukt sollte funzen tut aber nicht

          PHP-Code:
          <?php 

          echo "<pre>".$_GET['test']."; ".$_POST['frm_name']."</pre>";

          foreach(
          $_POST as $key => $val){
              
          $_POST[$key]=strip_tags($_POST[$key]);
              $
          $key $_POST[$key];
          }
          foreach(
          $_POST as $key => $val){
              
          $_GET[$key]=strip_tags($_GET[$key]);
              $
          $key $_GET[$key];
          }

          echo 
          strlen($test);

          if(
          strlen($test) > 1){
            echo 
          '<pre>'.$frm_name.'</pre><br>';
            echo 
          '<pre>'.$test.'</pre><br>'
          }
          else{
              echo 
          '<form method="post" action="pd_test_script.php?test=<b>ja</b>">';
                  echo 
          '<input type="text" size="20" name="frm_name"><input type="submit" value="OK">';
              echo 
          '</form>';
          }

          ?>
          Jetzt verwirft er mir die $frm_name als globale Variable komplett und bei der $test ist ihn der <b>-Tag egal...

          Kommentar


          • #6
            kein wunder, guck dir mal dein zweites foreach an, da gehts du $_POST durch und willst die Werte von $_GET reinschreiben...

            PHP-Code:
            foreach($_POST as $key => $val){
                $
            $key strip_tags($val);
            }
            foreach(
            $_GET as $key => $val){
                $
            $key strip_tags($val);

            Kommentar


            • #7
              So gings auch hab aber folgenden Fehler...

              PHP-Code:
              foreach($GLOBALS as $key => $val){
                  
              $GLOBALS[$key]=strip_tags($GLOBALS[$key]);
                  
              //$$key = $_GET[$key];
              }

              if(
              strlen($test) > 1){
                echo 
              '<pre>'.$frm_name."\n".$test.'</pre><br>'
              }

              echo 
              '<form method="post" action="pd_test_script.php?test=<b>ja</b>">';
                  echo 
              '<input type="text" size="20" name="frm_name"><input type="submit" value="OK">';
              echo 
              '</form>'
              Warning: Invalid argument supplied for foreach() in d:\apache group\apache\htdocs\pd_test_script.php on line 14

              Kommentar


              • #8
                Was willstn jetzt noch? Ich hab dir doch nen funktionierenden Code geliefert...

                Kommentar


                • #9
                  Danke Geht Schon...

                  Zitat von cycap Beitrag anzeigen
                  kein wunder, guck dir mal dein zweites foreach an, da gehts du $_POST durch und willst die Werte von $_GET reinschreiben...

                  PHP-Code:
                  foreach($_POST as $key => $val){
                      $
                  $key strip_tags($val);
                  }
                  foreach(
                  $_GET as $key => $val){
                      $
                  $key strip_tags($val);

                  Sorry bin ein Voll-Koffer "variable Variablen"...

                  Manchmal steht man auf der Leitung und dann noch der peinliche Flüchtigkeitsfehler...

                  Danke nochmal...

                  Das sollte halten bis ich mit der Überarbeitung durch bin. Oder was meinst du??

                  Kommentar


                  • #10
                    Alles OK jetzt gehts...

                    Zitat von cycap Beitrag anzeigen
                    Was willstn jetzt noch? Ich hab dir doch nen funktionierenden Code geliefert...
                    Sorry da haben sich unsere Post überschnitten...

                    Ich hab nach ner 2. alternative gesucht, weil ich den $_POST-Fehler übersehen hab...

                    Das Problem is nur das, dass der Kunden schon einen Hack-Angriff hatte und dass ich schon seit gestern um 13h nonstop an dem Dreck arbeite und vor lauter PHP-Code nicht mehr klar denken kann, da ich die 40.000 Zeilchen in Rekordzeit überarbeiten soll und das ganz allein ...

                    Und heute Morgen hatte ich die Idee mit dem Mini-Script und die nächsten Wochen das schlimmste zu verhindern...

                    Kommentar


                    • #11
                      Eigentlich ist es gar nicht so schwer die betreffenden Variablen zu finden:

                      - Code auf localhost kopieren (wo register_globals auf off steht)
                      - am Anfang error_reporting(E_ALL|E_STRICT);
                      - alle Meldungen "Notice: undefinded variable..." durchgehen und korrigieren

                      ... fertig

                      Kommentar


                      • #12
                        Naja, so richtig toll ist die Lösung ja nun nicht. Warum beschränkst Du nicht die automatische Initialisierung auf die POST Schlüssel die vom Form her zu erwarten sind? So schränkst Du zwar GET Request Angriffe ein, erlaubst aber immer noch das Setzen nicht initialisierter (bzw. mit Deiner Funktion u.U. sogar Überschreiben sämtlicher) globalen Variablen.
                        --

                        „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
                          Das Niveau des Posts ist IMHO nicht auf Profi-Ebene, ich verschiebe daher nach Anfänger.
                          Viele Grüße,
                          Dr.E.

                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                          1. Think about software design before you start to write code!
                          2. Discuss and review it together with experts!
                          3. Choose good tools (-> Adventure PHP Framework (APF))!
                          4. Write clean and reusable software only!
                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                          Kommentar


                          • #14
                            Was soll strip_tags denn an Sicherheit bringen?
                            "Mein Name ist Lohse, ich kaufe hier ein."

                            Kommentar


                            • #15
                              PHP-Code:
                              foreach($_REQUEST as $key => $val){
                                  $
                              $key strip_tags($val);

                              Vor allem hast du mit diesem Script das Sicherheitsproblem nicht gelöst, weil das im Endeffekt etwa das gleiche ist, wie register_globals = on. Da kann dir weiterhin jemand beliebige Variablen unterjubeln.
                              Gruss
                              L

                              Kommentar

                              Lädt...
                              X