aetzchen: Schaedlicher Code

Welche Funktionen benutzt ihr um schädlichen Code aus Eingaben zu entfernen.

Als wie ausreichend würdet ihr folgende Funktion beurteilen?

function html2txt($document){
$search = array('@<script[^>]*?>.*?</script>@si',  // Strip out javascript
               '@<style[^>]*?>.*?</style>@siU',    // Strip style tags properly
               '@<[/!]*?[^<>]*?>@si',            // Strip out HTML tags
               '@<![\s\S]*?--[ \t\n\r]*>@'        // Strip multi-line comments including CDATA
);
$text = preg_replace($search, '', $document);
return $text;
}

Grüße

  1. Hi,

    Welche Funktionen benutzt ihr um schädlichen Code aus Eingaben zu entfernen.

    Das kommt auf den Kontext an.

    Als wie ausreichend würdet ihr folgende Funktion beurteilen?

    Als ausreichend bloedsinnig.

    function html2txt($document){
    $search = array('@<script[^>]*?>.*?</script>@si',  // Strip out javascript
                   '@<style[^>]*?>.*?</style>@siU',    // Strip style tags properly
                   '@<[/!]*?[^<>]*?>@si',            // Strip out HTML tags
                   '@<![\s\S]*?--[ \t\n\r]*>@'        // Strip multi-line comments including CDATA
    );
    $text = preg_replace($search, '', $document);
    return $text;
    }

    Sei ehrlich - die hast du irgendwo "weggefunden", aber was sie macht und warum, davon kaum 'nen Schimmer?

    htmlspecialchars reicht in aller Regel aus. Wenn der Nutzer HTML-Code eingeben will, dann lass ihn doch - dann wird er halt als Text angezeigt; so wie bspw. hier im Forum auch. Waere ja schoen bloed, wenn man hier nicht mal Beispielcode posten koennte, weil er uebereifrig rausgefiltert wuerde ...

    MfG ChrisB

    1. Weggefunden jup klar.

      http://de3.php.net/strip_tags

      Klar wieso machen wenns die schon gibt. Leider versteh ich auch was sie macht.

      $search ist ein array was die Suchkriterien (zeichen) enthält.

      mit preg_replace ersetze ich ich den string  von $document die Zeichen aus $search durch ''. Na surprise Chris ;-)

      Da ich ja aber keinen Plan von JS hab  weiß ich net ob die funktion ausreicht um JS zu filtern.

      Deswegen die Anfrage. Außerdem sind andere Lösungen immer interessant.

      Grüße

      1. http://de3.php.net/strip_tags

        Klar wieso machen wenns die schon gibt. Leider versteh ich auch was sie macht.

        wenn du "leider" verstehst, was sie tun, warum verwendest du sie dann bzw warum verwendest du sie überhaupt, in deinem fall ist strip_tags wohl falsch, da du das eigentlich garnicht willst

        Da ich ja aber keinen Plan von JS hab  weiß ich net ob die funktion ausreicht um JS zu filtern.

        ja - aber sie filter auch alles möglich raus, was garnichs mit javascript zu tun hat

        Deswegen die Anfrage. Außerdem sind andere Lösungen immer interessant.

        wenn einer deiner benutzer folgendes posten will, würde das deine funktion ggf rausfiltern

        <ethnic>iyfeg</ethnic> sind so dumm, die können nichtmal alleine ihre schubänder zubinden

        1. Klar wieso machen wenns die schon gibt. Leider versteh ich auch was sie macht.
          wenn du "leider" verstehst, was sie tun, warum verwendest du sie dann bzw warum verwendest du sie überhaupt, in deinem fall ist strip_tags wohl falsch, da du das eigentlich garnicht willst

          Wo steht das ich das nicht will?  Es geht um schädlichen Code das kann auch Html sein (und wenn er mir bloß die Formatierung zerschießt).
          Desweiteren verwende ich nicht strip_tags sondern mom. Die funktion stand bloß auf der Seite von strip_tags.

          function html2txt($document){
          $search = array('@<script[^>]*?>.*?</script>@si',  // Strip out javascript
                         '@<style[^>]*?>.*?</style>@siU',    // Strip style tags properly
                         '@<[/!]*?[^<>]*?>@si',            // Strip out HTML tags
                         '@<![\s\S]*?--[ \t\n\r]*>@'        // Strip multi-line comments including CDATA
          );
          $text = preg_replace($search, '', $document);
          return $text;
          }

          Bei Email dann z.b. reguläre Ausdrücke.

          if(!ereg("[1]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,6})$",$from_mail))

          ja - aber sie filter auch alles möglich raus, was garnichs mit javascript zu tun hat

          Was auch richtig ist da ich bei Namenseingaben wohl kaum <text bla bla>
          verwende.

          Ich will jede Codeausgabe verhindern. Der Nutzer muss nicht immer alles können.


          1. _a-z0-9- ↩︎

          1. Wo steht das ich das nicht will?

            du weisst es nur nicht, du willst verhindern, dass dir jemand die seite mit html oder javascript zerstört
            htmlspecialchars löst dein problem, funktioniert hier im forum problemlos

            Was auch richtig ist da ich bei Namenseingaben wohl kaum <text bla bla>
            verwende.

            du nicht - aber was ist, wenn sich jetzt jemand den nich <omg>|OMFG-3y3-r-s0-L337-11111!!!!</omg> einbildet?
            dafür reicht ein htmlspecialchars aus und du hast all deine probleme gelöst

            Ich will jede Codeausgabe verhindern. Der Nutzer muss nicht immer alles können.

            jemand schreibt folgendes:
            "folgende annahme: a<b aber was ist wenn mein ergebnis b>a ist? habe ich da was falsch gemacht?"

            htmlspecialchars hilft, dein codeschnipsel verstümmelt die eingabe

            <script type="text/javascript">
            function evilfunction() {
            }
            evilfunction();
            </script>

          2. Hi,

            Wo steht das ich das nicht will?  Es geht um schädlichen Code das kann auch Html sein (und wenn er mir bloß die Formatierung zerschießt).

            das kann Text gar nicht (außer es fehlen Leerzeichen).

            Desweiteren verwende ich nicht strip_tags sondern mom. Die funktion stand bloß auf der Seite von strip_tags.

            Allein dass Du diese Funktion bzw. Seite dazu gewählt hast, ist schon falsch gewesen!

            freundliche Grüße
            Ingo

          3. Hallo,

            Bei Email dann z.b. reguläre Ausdrücke.

            if(!ereg("[1]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,6})$",$from_mail))

            und was soll diese Prüfung? Nicht zukunftsorientiert, syntaktisch korrekte E-Mailadressen werden zurückgewiesen, ungültige E-Mail-Adressen bleiben erlaubt ...

            Ich empfehle Selfforumssieb, Validierung von E-Mail-Adressen mit dem zugehörigen Thread. Nett der RegExp von Tom Christiansen, auf den Alexander in seinem Beitrag verweist.

            Freundliche Grüße

            Vinzenz


            1. _a-z0-9- ↩︎

            1. Ich empfehle Selfforumssieb, Validierung von E-Mail-Adressen mit dem zugehörigen Thread. Nett der RegExp von Tom Christiansen, auf den Alexander in seinem Beitrag verweist.

              Danke!!!

      2. Hi,

        Da ich ja aber keinen Plan von JS hab  weiß ich net ob die funktion ausreicht um JS zu filtern.

        wie gesagt reicht htmlspecialchars i.d.R. aus und ist dafür auch vorgesehen.
        Was aber weder diese PHP-Funktion noch Deine RegEx verhindern, sind Event-Handler in evtl. *von Deinem Script* generierten Links.

        freundliche Grüße
        Ingo

  2. Moin!

    Welche Funktionen benutzt ihr um schädlichen Code aus Eingaben zu entfernen.

    htmlspecialchars() wandelt alles, was in HTML böse Auswirkungen haben KÖNNTE, in Entities um, so dass der eingegebene Text in jedem Fall wieder nur simpler Text wird, und keinerlei schädliche Aktivität entfalten kann.

    Als wie ausreichend würdet ihr folgende Funktion beurteilen?

    Die Funktion ist unzureichend. Sie filtert nach Negativliste gewisse Dinge, die dir nicht gefallen, obwohl du niemals alles kennen kannst, was dir eventuell nicht gefällt.

    Der korrekte Ansatz wäre, nach Positivliste gewisse Dinge, von denen du sicher bist, dass sie unschädlich sind, durchzulassen, und alles andere rauszufiltern.

    htmlspecialchars() tut genau das.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."