Regulärer Ausdruck um Scriptbereiche zu löschen

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

  • Regulärer Ausdruck um Scriptbereiche zu löschen

    Hi,
    ich habe mal wieder nen Problem mit den ollen regulären Ausdrücken. Am Anfang denke ich immer "Das is doch bestimmt ganz leicht...reihste die Sachen aneinander und fertig" nur macht er wie eigentlich immer nicht.

    Also ich habe so einen Browser WYSIWYG Editor in meine Homepage eingebaut und damit kann man dann einige Seiten erstellen und einbinden.
    Da man so einen Editor aber auch dazu mißbrauchen kann PHP oder Javaskripte zu Coden will ich nach dem Absenden des Inhalts des Editors prüfen, ob solche Sachen dadrin sind und diese rauslöschen.

    Gedacht habe ich es mir so (funktioniert aber nicht)
    PHP-Code:
    preg_replace('/(<script.+<\/script>)|(<\?php.+\?>)|(<\?.*\?>)/i','',$text); 
    Kann mir wer helfen wie der lauten müßte damit Javaskripte und PHP Skripte gelöscht werden?
    Vielleicht hat ja auch einer einen Ausdruck irgendwo rumfliegen der genau für diese Thematik gut ist und auch anderen Müll an den ich jetzt noch nicht gedacht habe rauskillt.

    PS: Habe gerade gesehen das Forum zeigt einige \ im PHP-Code nicht an
    daher pflichte ich bei, dass <? escaped ist und ?> auch jeweils. Ausserdem das </script ist auch noch escaped.

    PS2: Hups falsches Forum...wie kann man seinen Beitrag löschen und woanders neu posten...?
    Wenn ihn wer verschieben will nur zu
    Zuletzt geändert von Novan; 05.09.2003, 23:53.

  • #2
    preg_replace('/((\<script(.+)\<\/script\> )|(\<\?php(.+)\?\> )|(\<\(.*)?\>))/i','',$text);

    mal ganz dumm geraten.

    Kommentar


    • #3
      Hmm,
      ich hab es nun geschafft die PHP Sachen aus dem Code zu löschen aber Javascript macht er immer noch nicht

      PHP-Code:
      $text preg_replace('/(\<\?php[^\?\>]*\?\>)|(\<\?[^\?\>]*\?\>)|(<script[^<\/script>]*<\/script>)/i','',stripslashes($HTTP_POST_VARS['ta'])); 
      PS: Ist wie immer alles richtig escaped. Wir im Forum hier bloß nicht dargestellt.

      Kommentar


      • #4
        dann poste mal im nomalen text, bzw. code

        Kommentar


        • #5
          Es ist zwar nur eine Testeingabe aber dort sind halt alle relevanten dinger drin die rausgelöscht werden sollen
          PHP-Code:
          Huhu das ist ein Test<br><br>
          <?php
          print 'f';
          ?>

          Noch ein Test

          <?
          print 'huhu';
          ?>

          Und nun noch Javascript

          <script language="JavaScript">
          <!--
          alert('JavaScript');
          //-->
          </script>
          Am Ende soll dann nur noch da stehen:
          PHP-Code:
          Huhu das ist ein Test<br><br>
          Noch ein Test
          Und nun noch Javascript 
          Alles andere soll rausgelöscht werden.

          Kommentar


          • #6
            ich mein dir regex

            Kommentar


            • #7
              PHP-Code:
              '/(<?php[^?>]*?> )|(<?[^?>]*?> )|(<script[^</script>]*</script> )/i'
              Davon funktionieren die ersten beiden Abschnitte, die sich mit php beschäftigen nur der Teil
              PHP-Code:
              (<script[^</script>]*</script>) 
              der ja Javascriptpassagen rauslöschen soll funktioniert nicht.

              Kommentar


              • #8
                du solltest mal als text/code posten, wegen den escapes-

                Kommentar


                • #9
                  //
                  // Prüfung ob Skriptinhalte im Quelltext exestieren denn diese sind verboten.
                  //
                  $text = preg_replace('/(\<\?php[^\?\>]*\?\>)|(\<\?[^\?\>]*\?\>)|(<script[^<\/script>]*<\/script>)/i','',stripslashes($HTTP_POST_VARS['ta']));
                  //
                  // Speichern der Daten
                  //
                  $sql = 'UPDATE '.TT_TABLE.' SET
                  titel = "'.addslashes($HTTP_POST_VARS['titel']).'",
                  text = "'.$text.'"
                  WHERE tips_tricks_id = '.$edit_entry;

                  Kommentar


                  • #10
                    ich versteh deinen ausdruck nich, wozu [^<\/script>]* ?

                    probier mal
                    Code:
                    $text='Test1
                    <?php print "f"; ?>
                    Test2
                    <? print "huhu"; ?>
                    Test3
                    < script language="JavaScript">
                    <!--
                    alert("JavaScript 1");
                    //-->
                    </script>
                    Test4
                    < script language="JavaScript">
                    <!--
                    alert("JavaScript 2");
                    //-->
                    </script>
                    Test5
                    <?php
                    echo "Na sowas";
                    ?>
                    Test6';
                    $pattern='%(<[ ]*\?.*\?[ ]*>)|(<[ ]*script[ ]*(.*)>.*<[ ]*/[ ]*script[ ]*>)%siU';
                    $text_bereinigt=preg_replace($pattern,'',$text);
                    echo '<xmp>'.$text.'</xmp><hr /><xmp>'.$text_bereinigt.'</xmp>';
                    mehr als die fragezeichen sind nich escaped
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      Also ich habe dein Ausdruck mal probiert aber der filtert gar nichts raus weder phpcode noch javascriptcode

                      Also das (<script[^<\/script>]*<\/script>) soll alle Abschnitte finden, die mit <script anfangen und dannach dürfen unbegrenzt viele Zeichen kommen bloß kein </script> und das Ende soll </script> sein.

                      Ich habe mir das so gedacht, da es bei den beiden Abschnitten davor ja auch gefunzt hat. Also dachte ich es mir so das ich es einfach kopiere und die Zeichen tausche.

                      Kommentar


                      • #12
                        bei mir geht's, und damit du's mir glaubst hier ein beweis
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          Danke....
                          habe das wohl etwas überstürzt getestet es läuft doch

                          Leider verstehe ich den Ausdruck nicht so wirklich. Sieht ziemlich kuriose aus. Wenn du noch Lust hast kannst du den ja mal für mich erklären.

                          Kommentar


                          • #14
                            denk dir die [ ]* mal weg, die verhindern nur dass jemand statt <script> einfach < script> schreibt

                            dann hast du nur noch %(<\?.*\?>)|(<script(.*)>.*</script)%siU

                            das sollte klar sein oder?
                            Ich denke, also bin ich. - Einige sind trotzdem...

                            Kommentar


                            • #15
                              hmm jo sieht schon viel einleuchtender aus

                              wie sieht das mit
                              ASP Pssagen aus? Intressieren mein Server zwar nicht weil der kein ASP unterstützt aber nur aus neugiert.
                              und was macht das % ist das gleich einem / für die modifier?

                              Kommentar

                              Lädt...
                              X