Ankündigung

Einklappen
Keine Ankündigung bisher.

"gefährliche Strings" Entschärfen.

Einklappen

Neue Werbung 2019

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

  • "gefährliche Strings" Entschärfen.

    Hi.

    Ich würde gerne mal wissen, wie man "gefährliche Strings" entschärft.

    Gefährliche Stings sind alles, was durch Usereingaben oder externe Einbindungen zustade kommt, also wo jemand versuchen könnte, Schadcode einzuspeisen. Z.B. URL Parameter, Formulareingaben, von Usern hochgeladene Daten, extern eingebundene Daten etc.
    Deswegen muss der String bereinigt werden, und potentiell gefährliche Zeichen entfernt werden. Wie z.B. Backticks, escape Sequenzen, Steuerzeichen, Metazeichen usw. Außerdem wäre es gut, wenn der Sting auf gefährliche Sachen wie z.B. SQL Injection oder sowas untersucht wird und dann gelöscht wird.

    Gibts dafür einen PHP Befehl, eine fertige Funkion, vorgefertigte Regex?

    Danke


  • #2
    Daten absichern:
    PHP: mysql_real_escape_string - Manual
    PHP: htmlspecialchars - Manual

    Daten überprüfen:
    PHP: filter_var - Manual
    (+ den Standartkram)

    So eine Master-Funktion, die alles sicher macht gibts nicht. Einfach jeden Wert der vom User kommt Überprüfen und absichern.

    Grüße
    Signatur:
    PHP-Code:
    $s '0048656c6c6f20576f726c64';
    while(
    $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

    Kommentar


    • #3
      Zitat von e.tech Beitrag anzeigen
      Ich würde gerne mal wissen, wie man "gefährliche Strings" entschärft.
      In dem man sich erst mal der potentiellen Gefahr in der jeweligen Situation bewusst ist.

      Deswegen muss der String bereinigt werden, und potentiell gefährliche Zeichen entfernt werden. Wie z.B. Backticks, escape Sequenzen, Steuerzeichen, Metazeichen usw. Außerdem wäre es gut, wenn der Sting auf gefährliche Sachen wie z.B. SQL Injection oder sowas untersucht wird und dann gelöscht wird.
      Nein, das ist Unfug.

      Daten sind jeweils situationsgerecht danach zu behandeln, in welchen Kontext sie gerade gebracht werden sollen - und nicht pauschal für „alles“.


      Lies folgenden Artikel, danach sollte einiges klarer sein: Artikel:Kontextwechsel – SELFHTML

      Kommentar


      • #4
        Danke.

        Außer diesen Standardbefehlen, die man immer anwenden sollte, gibts noch andere Maßnahmen die man ergreifen könnte?

        Ich denke dabei z.B. an einen RegEx, der problematische Zeichen in einem String nicht nur maskiert, sondern entfernt.
        z.B. die Backticks, ASCII-Steuerzeichen (Also Zeichen 00 bis 1F)

        Und darüber hinaus noch andere Maßnahmen, um die Gefahr von Angriffen durch manipulierte Strings zu minimieren.

        Ich wollte mir halt eine universelle Sting-Sicherungsfunktion machen, durch die ich alle Strings die Daten von Außen haben, durchreiche. Die Funktion soll dann ne Art Grundbereinigung machen, spezielle Absicherungsmaßnahmen können dann Situationsbedingt erfolgen.

        Kommentar


        • #5
          Grundbereinigung - Wozu? Das wäre ein doppelter Aufwand wenn zudem noch eine situationsbedingte "Bereinigung" hinzukommt. Wieso schreibst du nicht eine hübsche Klasse mit verschiedenen situationsabhängigen Filtern?

          Ein Beispiel: Das Filtern von $_GET-Variablen. Jenachdem wie die URLs gestaltet werden, ist es ausreichend, bspw. nur Buchstaben, Zahlen und ein Minusstrich zu erlauben. Alle anderen Zeichen werden herausgefiltert. Aus welchem Grund sollte ich den String vorab durch einen "Universalfilter" schleußen?

          Kommentar


          • #6
            Zitat von e.tech Beitrag anzeigen
            Ich wollte mir halt eine universelle Sting-Sicherungsfunktion machen, durch die ich alle Strings die Daten von Außen haben, durchreiche.
            Noch mal: Das ist Unfug.

            Eine solche Funktion verstümmelt letztendlich nur die Daten, und das ist Quatsch.

            Immer wieder gern genommenes Beispiel: Wenn die Programmierer dieses Forums so dumm gewesen wären, < und > pauschal als „gefährliche“ Zeichen zu betrachten und rauszufiltern - dann könnten wir die meisten PHP/HTML-Probleme hier gar nicht diskutieren, weil wir keinen zugehörigen Quellcode posten könnten.
            Dass eine solche Verstümmelung von Daten also iaR. nur Unfug sein kann, müsste damit doch eigentlich einleuchten.

            Kommentar


            • #7
              Ne Klasse könnte ich auch machen.

              Wo ich dann je nach Situation mysql_real_escape_string
              htmlspecialchars, filter_var benutze, input_filter_var etc anwende.

              Stelle mir das halt so vor: Ein String wird von Formular oder aus Getvariable entgegen genommen.
              Dann geht er in die Filterfunktion oder Klasse.
              Dort wird erst mal ein RegEx angewendet, um alle Ascii-Sonderzeichen+Backticks zu entfernen.
              Außerdem wird die Länge geprüft.Viel zu lange Strings werden gekürzt oder verworfen.
              Und dann halt einer der oben angegebenen Befehle und individuelle RegEx und Filterregeln, jenachdem was übergeben wurde und für was die Variable benutzt wird.

              Zeichen wie < und > wolte ich übrigens nicht generell entfernen. Nur die Ascii-Steuerzeichen und Backticks wollte ich generell entfernen.

              Kommentar


              • #8
                Zitat von e.tech Beitrag anzeigen
                Stelle mir das halt so vor: Ein String wird von Formular oder aus Getvariable entgegen genommen.
                Dann geht er in die Filterfunktion oder Klasse.
                Warum?

                Behandle die Daten genau dann und erst dann, wenn es erforderlich ist.

                Zeichen wie < und > wolte ich übrigens nicht generell entfernen. Nur die Ascii-Steuerzeichen und Backticks wollte ich generell entfernen.
                Und was hast du bspw. gegen Backticks?

                Kommentar


                • #9
                  Entfernen < Unschädlich machen
                  Signatur:
                  PHP-Code:
                  $s '0048656c6c6f20576f726c64';
                  while(
                  $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

                  Kommentar


                  • #10
                    Naja, Backticks erlauben das ausführen von Shell Kommandos.

                    $output = `ls -al`;
                    echo "<pre>$output</pre>";

                    Und man weiß nie, wie die missbraucht werden könnten.

                    Kommentar


                    • #11
                      PHP-Code:
                      $output = `ls -al`;
                      echo 
                      "<pre>$output</pre>"
                      Das ist aber ein PHP Konstrukt und kein String-Bestandteil.

                      PHP-Code:
                      "`ls -al`" 
                      ist harmlos.
                      @fschmengler - @fschmengler - @schmengler
                      PHP Blog - Magento Entwicklung - CSS Ribbon Generator

                      Kommentar


                      • #12
                        Und man weiß nie, wie die missbraucht werden könnten.
                        Falsch. Du weißt es nicht.

                        In dem man sich erst mal der potentiellen Gefahr in der jeweligen Situation bewusst ist.
                        --

                        „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
                          Wenn ich dich richtig verstehe, möchtest du gewisse Angriffe abblocken bevor sie überhaupt den Kern der Anwendung erreichen...

                          In so einem Fall könntest du mit einem IDS, zb. PHPIDS » Web Application Security 2.0 arbeiten.

                          Aber Achtung: Strings richtig zu encoden usw. bleibt auf jeden Fall weiterhin deine Aufgabe (bzw. die des Entwicklers)

                          Kommentar

                          Lädt...
                          X