hotti: alle Script-Tags entfernen für eine Vorschau

hi,

s. Thema. Es geht um eine Online-Demo meines CMS, da können Bodies editiert werden und so kann da auch JavsScript eingebaut sein. Es soll jedoch eine Vorschau geben und dafür müssen die <script>-Tags alle raus. Gibt es evntl. in jQuery eine fertige Funktion, welche die gewünschten Tags aus einer String-Variablen (und nur aus dieser) entfernt?

Ansonsten müsste ich den String erst zum Server jagen und das mit Perl erledigen.

Bitte mal um Hinweise, Danke Dir!

  1. Om nah hoo pez nyeetz, hotti!

    s. Thema. Es geht um eine Online-Demo meines CMS, da können Bodies editiert werden und so kann da auch JavsScript eingebaut sein. Es soll jedoch eine Vorschau geben und dafür müssen die <script>-Tags alle raus. Gibt es evntl. in jQuery eine fertige Funktion, welche die gewünschten Tags aus einer String-Variablen (und nur aus dieser) entfernt?

    Ansonsten müsste ich den String erst zum Server jagen und das mit Perl erledigen.

    Bitte mal um Hinweise, Danke Dir!

    Ersetze <script durch <!--script und </script> durch </script-->.

    Matthias

    --
    Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Dom und Domina.

  2. Meine Damen und Herren, habe ich Ihre Aufmerksamkeit?

    s. Thema. Es geht um eine Online-Demo meines CMS da können Bodies editiert werden und so kann da auch JavsScript eingebaut sein. Es soll jedoch eine Vorschau geben und dafür müssen die <script>-Tags alle raus.

    Vermutlich möchtest du damit XSS-Attacken vermeiden. Da reicht es aber nicht aus nur <script>-Tags zu entfernen. Es gibt diverse andere Möglichkeiten JavaScript in HTML einzubetten. Beispielsweise über Attribut-EventHandler: <button onclick="alert('buhaha');"> oder das JavaScript-URI-Scheme: <a href="javascript:alert('buhaha');">

    Gibt es evntl. in jQuery eine fertige Funktion, welche die gewünschten Tags aus einer String-Variablen (und nur aus dieser) entfernt?

    String-Verarbeitungsfunktionen sind ungeeignet für DOM-Manipulationen. Die Grenzen sind da relativ schnell erschöpft.

    Bitte mal um Hinweise, Danke Dir!

    Ich würde JavaScript gar nicht generell unterbinden, sondern eine Sandbox für User-generiertes JavaScript schaffen. JavaScript ist immerhin ein wichtiger Bestandteil jeder Webseite und deine Vorschau-Funktion sollte das nicht einfach ignorieren.

    Trotzdem musst du natürlich dafür sorgen, dass außerhalb der Sandbox kein ausführbarer JavaScript-Code landet. XSS ist dein Stichwort, dazu solltest du jede Menge Lektüre finden.

    --
    “All right, then, I'll go to hell.” – Huck Finn
    1. Danke Dir,

      so wie es hier mit der Vorschau aussieht, wird, <script> gar nicht ausgeführt. Oder habe ich was übersehen?

      MfG

      1. Meine Damen und Herren, habe ich Ihre Aufmerksamkeit?

        so wie es hier mit der Vorschau aussieht, wird, <script> gar nicht ausgeführt. Oder habe ich was übersehen?

        Was sollte denn passieren, wenn man auf Vorschau klickt? In meinem Test ist garnichts passiert.

        Die Seite schmeißt mir übrigens 6 Fehler in die Konsole und hat sich nach 3,4 Klicks aufgehangen.

        --
        “All right, then, I'll go to hell.” – Huck Finn
      2. Meine Damen und Herren, habe ich Ihre Aufmerksamkeit?

        Danke Dir,

        so wie es hier mit der Vorschau aussieht, wird, <script> gar nicht ausgeführt. Oder habe ich was übersehen?

        Du fügst die Benutzereingaben über innerHTML ein, wenn man <script>-Elemente als DOMString in das bestehende Dokument einfügt werden diese AFAIK nicht automatisch ausgeführt.

        Für die anderen Methodoen Javascript einzubetten (onclick, href="javascript:") gilt das allerdings nicht.

        Eine einfache XSS-Attacke auf dein Skript:

        <img src="foooooo" onerror="alert('Ich bin ein XSS-Angriff');">

        --
        “All right, then, I'll go to hell.” – Huck Finn
    2. hi,

      Trotzdem musst du natürlich dafür sorgen, dass außerhalb der Sandbox kein ausführbarer JavaScript-Code landet. XSS ist dein Stichwort, dazu solltest du jede Menge Lektüre finden.

      Lektüre ja, aber kein Beispiel zum Einrichten einer Sandbox wo usergeneriertes JS schadenfrei ausgeführt werden kann. Hast Du ein Beispiel?

      Soweit ich XSS verstehe, wird das nur dann richtig böse, wenn die Location einen scheme://auth/path hat like http://example.com.

      MfG

      --
      Compact CMS mit Vorschau.
      1. Meine Damen und Herren, habe ich Ihre Aufmerksamkeit?

        Trotzdem musst du natürlich dafür sorgen, dass außerhalb der Sandbox kein ausführbarer JavaScript-Code landet. XSS ist dein Stichwort, dazu solltest du jede Menge Lektüre finden.

        Lektüre ja, aber kein Beispiel zum Einrichten einer Sandbox wo usergeneriertes JS schadenfrei ausgeführt werden kann. Hast Du ein Beispiel?

        Zum Beispiel: Google caja oder Crockfords ADsafe.

        Das Thema wurde auch bei Stackoverflow schon häufiger diskutierte, siehe auch die verwandten Beiträge.

        Soweit ich XSS verstehe, wird das nur dann richtig böse, wenn die Location einen scheme://auth/path hat like http://example.com.

        Wenn es einem Angreifer gelingt JavaScript-Code in deine Seite einzuschleusen, dann ist immer richtig kritisch. Egal über welche Adresse die Nutzer oder Angreifer auf deine Seite gelangt sind.

        --
        “All right, then, I'll go to hell.” – Huck Finn
        1. hi Danke Dir!

          Wenn es einem Angreifer gelingt JavaScript-Code in deine Seite einzuschleusen, dann ist immer richtig kritisch.

          Na, dann ist ja hier alles geritzt. Die Vorschauseite hat einen BlobURL und ist somit faktisch gar nicht Meine Seite ;)

          MfG,
          Horst Henne