hans: javascript entfernen

Hallo

auf meiner seite kann man html-code posten. ich möchte aber natürlich javascript vollständig ausmisten (xss-angriff).

reicht mein code dazu aus oder gibts da noch schlupflöscher:

$article = str_ireplace("<script","..",$article);
 $article = str_ireplace("javascript:","..",$article);
 $article = str_ireplace("onunload","..",$article);
 $article = str_ireplace("onsubmit","..",$article);
 $article = str_ireplace("onselect","..",$article);
 $article = str_ireplace("onreset","..",$article);
 $article = str_ireplace("onmouseup","..",$article);
 $article = str_ireplace("onmouseover","..",$article);
 $article = str_ireplace("onmouseout","..",$article);
 $article = str_ireplace("onmousemove","..",$article);
 $article = str_ireplace("onmousedown","..",$article);
 $article = str_ireplace("onload","..",$article);
 $article = str_ireplace("onkeyup","..",$article);
 $article = str_ireplace("onkeypress","..",$article);
 $article = str_ireplace("onkeydown","..",$article);
 $article = str_ireplace("onfocus","..",$article);
 $article = str_ireplace("onerror","..",$article);
 $article = str_ireplace("ondblclick","..",$article);
 $article = str_ireplace("onclick","..",$article);
 $article = str_ireplace("onchange","..",$article);
 $article = str_ireplace("onblur","..",$article);
 $article = str_ireplace("onabort","..",$article);
 $article = str_ireplace("cookie","..",$article);

Vielen Dank

  1. Hallo

    wäre es nicht das Einfachste, von "<script" bis "</script>" (ersatzweise Dateiende) alles zu überlesen?

    Kalle

    1. wäre es nicht das Einfachste, von "<script" bis "</script>" (ersatzweise Dateiende) alles zu überlesen?

      nicht wirklich, weil man mit diesen eventhandlern auch scripte starten kann, zB

      <body onload="böses javascript">

      1. wäre es nicht das Einfachste, von "<script" bis "</script>" (ersatzweise Dateiende) alles zu überlesen?
        nicht wirklich, weil man mit diesen eventhandlern auch scripte starten kann, zB
        <body onload="böses javascript">

        Wenn die Funktion boesesJavascript() nicht vorhanden ist, wird sie auch nicht gestartet.

        Kalle

        1. Hi,

          Wenn die Funktion boesesJavascript() nicht vorhanden ist, wird sie auch nicht gestartet.

          Es spricht nichts dagegen, ebendort auch die Funktion boesesJavaScript() selbst zu notieren.

          Gruß, Cybaer

          --
          Man muß viel gelernt haben, um über das, was man nicht weiß, fragen zu können.
          (Jean-Jacques Rousseau, Philosoph u. Schriftsteller)
    2. wäre es nicht das Einfachste, von "<script" bis "</script>" (ersatzweise Dateiende) alles zu überlesen?

      schlechte idee ;) was ist mit scripten in anderen sprachen? oder bewussten tippfehler oder verschleierungen

      zb "<scrIpt>" oder "< script>" die die fehlerkorrektur irgend eines browsers korrigiert und dann dennoch einen angriffspunkt bietet

      kontextgerecht codieren (wie hier im forum) ist die beste möglichkeit

      1. zb "<scrIpt>" oder "< script>" die die fehlerkorrektur irgend eines browsers korrigiert und dann dennoch einen angriffspunkt bietet

        kontextgerecht codieren (wie hier im forum) ist die beste möglichkeit

        Du meinst, z.B. aus < &lt; machen?

        Das widerspricht dem Eingangs-Posting "auf meiner seite kann man html-code posten."

        Habe ich so verstanden, dass das auch zulässig sein soll, nur eben keine Scripte.

        Kalle

        1. Du meinst, z.B. aus < &lt; machen?

          ja

          Das widerspricht dem Eingangs-Posting "auf meiner seite kann man html-code posten."

          ich verstehe das so: "man kann html code posten" und nicht "man kann seine postings unter zuhilfenahme von html auszeichnen" ;)

      2. Hello,

        zb "<scrIpt>"

        Das sollte str_ireplace() doch leisten.

        forum) ist die beste möglichkeit
        Liebe Grüße aus Syburg bei Dortmund

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Das sollte str_ireplace() doch leisten.

          das schon - aber bei <scri pt> beissts dann schon aus - ich weiss zwar nicht ob wirklich ein browser das ding korrigiert, aber es gibt sicher methoden mit denen man irgendwas reinmogeln kann, was der internet explodert dann brav liest ;)

          forum) ist die beste möglichkeit

          da fehlt doch was?

  2. Hi hans!

    auf meiner seite kann man html-code posten. ich möchte aber natürlich javascript vollständig ausmisten (xss-angriff).

    Was heißt "HTML-Code posten"?

    Einfach nur HTML-Code-Beispiele? Dann maskiere kontextgerecht mit htmlspecialchars.

    MfG H☼psel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
    1. Was heißt "HTML-Code posten"?

      Einfach nur HTML-Code-Beispiele?

      nein, der gepostete html-code wird auch ausgeführt und zum formatieren des textes benutzt (mittels fckeditor).

      danke aber

      1. nein, der gepostete html-code wird auch ausgeführt und zum formatieren des textes benutzt (mittels fckeditor).

        Ich habe mal bei beepworld die Werbung per CSS ausblenden wollen, aber mein CSS wurde eliminiert. Da habe ich CSS- Blöcke mit Javascript eingebracht und die Seite war werbefrei.

        Und diesen Hinterausgang willst du jetzt auch noch zumachen?

        Kalle

        1. nein, der gepostete html-code wird auch ausgeführt und zum formatieren des textes benutzt (mittels fckeditor).

          was spricht gegen die best practice "bb code" zum formatieren?

          sämtliche hintertüren (auch jene in form von browser-bugs) kannst du kaum schließen

          Ich habe mal bei beepworld die Werbung per CSS ausblenden wollen, aber mein CSS wurde eliminiert. Da habe ich CSS- Blöcke mit Javascript eingebracht und die Seite war werbefrei.

          weee! das ist aber sicher nicht im sinne der beepworld-nutzungsbedingungen

          1. Ich habe mal bei beepworld die Werbung per CSS ausblenden wollen, aber mein CSS wurde eliminiert. Da habe ich CSS- Blöcke mit Javascript eingebracht und die Seite war werbefrei.
            weee! das ist aber sicher nicht im sinne der beepworld-nutzungsbedingungen

            Oha, da ich natürlich jederzeit ein braver Vorzeige- Bürger mich zu bemühen pflege, habe ich sofort nachgesehen und dieses gefunden:

            "Das Mitglied räumt Beepworld das Recht ein, AGB-konforme Werbung auf den in das Beepworld Netzwerk eingestellten Webseiten zu schalten."

            Dieses Recht KANN ich gar nicht ausräumen, da die Werbung ja Bestandteil des gesendeten Dokuments ist. Und geschaltet wird sie ja auch. Erst EIN, dann wieder AUS. Da müsste schon eine Mindest- Anzeigedauer und Mindestgröße verabredet werden.

            1. Dieses Recht KANN ich gar nicht ausräumen, da die Werbung ja Bestandteil des gesendeten Dokuments ist.

              doch, indem du dem vertrag nicht zustimmst - der anbieter hat seinen agb schon einseitig zugestimmt, er darf sie ohne deiner zustimmung nicht ändern (bzw er muss dich fristgerecht informieren) du darfst sie ebenfalls nicht einseitig ändern, ohne den anbieter zu informieren - wenn er nicht einverstanden ist, kann er deinen vertrag aufgrund von nichterfüllung kommentarlos als nichtig erklären

              Und geschaltet wird sie ja auch. Erst EIN, dann wieder AUS. Da müsste schon eine Mindest- Anzeigedauer und Mindestgröße verabredet werden.

              dass die werbung nicht sofort wieder ausgeblendet wird bzw werden, geht implizit daraus hervor bzw ist ein schlüssige tatsache - es wäre absurd, wenn dem nich so wäre

              wenn du bei einem dienstleister eine dienstleistung in anspruch nimmst, musst duch auch explizit in allen punkten den agb zustimmen, du machst das schlüssig durch bestimmte handlungen

              auch ein bäcker hat eine agb - dass du die brötchen bei ihm kaufst indem du ihm geld gibst, ist ein schlüssiges indiz dafür, dass du dem vertrag zustimmst

        2. Hi,

          Ich habe mal bei beepworld die Werbung per CSS ausblenden wollen, aber mein CSS wurde eliminiert. Da habe ich CSS- Blöcke mit Javascript eingebracht und die Seite war werbefrei.

          Und diesen Hinterausgang willst du jetzt auch noch zumachen?

          es ist ein legitimes Interesse des Dienstleisters, dessen Dienstleistung Du in Anspruch nimmst, sein Angebot gemäß seiner (üblichen) Geschäftsmodelle zu finanzieren. Verhinderst Du dies mutwillig, braucht der Dienstleister nicht mal irgendwas in seinen AGBs geschrieben zu haben - er kann jeden Vertrag mit Dir umgehend und fristlos aufkündigen. Gegebenenfalls steht dann noch eine Klage wegen Geschäftsschädigung an.

          Cheatah

          --
          X-Self-Code: sh:( fo:} ch:~ rl:| br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
          X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
          X-Will-Answer-Email: No
          X-Please-Search-Archive-First: Absolutely Yes
  3. Hello,

    irgendwie kannst Du damit auch den Nutztext kaputt machen, wenn der nun zufällig über 'onmouseup' berichtet, oder?

    Liebe Grüße aus Syburg bei Dortmund

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  4. Ich weiß nicht, ob das Suchen von Strings der richtige Ansatz ist. Eine saubere Lösung wäre, den vom Benutzer erstellten Inhalt parsen zu lassen, wobei du ein DocumentFragment erhältst, den entsprechenden Inhalt darauf prüfen, ob nur bestimmte erlaubte Elemente und Attribute vorkommen und alles andere zu entfernen.
    Mit der Blacklist-Methode hast du nämlich das Problem, dass irgendein zukünftiger Browser (bzw. eine neue Version eines existierenden Browsers) ein neues, proprietäres Attribut einführt und schwupps, ist deine Seite XSS-anfällig.

    --
    Reden ist Silber, Schweigen ist Gold, meine Ausführungen sind Platin.
    Self-Code: sh:( ch:? rl:( br:> n4:( ie:{ mo:) va:) de:> zu:} fl:| ss:| ls:~ js:|