kostenloser Webspace werbefrei: lima-city


[RegExp] Problem

lima-cityForumProgrammiersprachenSonstige Programmiersprachen

  1. Autor dieses Themas

    s*******e

    (wenn falsches Forum -> bitte verschieben)

    Ich progge mir ein paar BBCodes ein, nur bei QUOTE komme ich nicht weiter, der aktuelle Code sieht so aus:

    /\[QUOTE=(\"|)(.*?)(\"|)\]([^?\n\r\t].*?)\[\/QUOTE\]/si


    Also es wird auch was ersetzt, nur wenn ich zwei QUOTES tag/ineinander">ineinander verschachtele dann wird immer der erste /QUOTE benutzt, statt der zweite!
    Wie bekomme ich es hin das man QUOTES ineinander verschachteln kann? Also ein Zitat zitieren ;)

    Danke,
    sneerfire
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. sandrock-jonas

    Kostenloser Webspace von sandrock-jonas

    sandrock-jonas hat kostenlosen Webspace.

    Ich hab das so gelöst:

    <?php
    while (preg_match('/\[quote\](.*)\[\/quote\]/Uis',$text))
      $text = preg_replace('/\[quote](.*)\[\/quote\]/Uis','<div class=\'quote\'><u>Zitat:</u><br />\\1</div>',$text);
    ?>


    Analog könntest du das mit deinem Regulären Ausdruck machen.

    Beitrag geaendert: 11.3.2007 17:00:13 von sandrock-jonas
  4. Autor dieses Themas

    s*******e

    Funktionier bei mir nicht so ganz...
    Dann geht das auch alles durcheinander:

    http://www.myimg.de/?img=quotes2be.jpg

    EDIT: Ahh, nun gehts! Hatte bei Copy&Paste was vergessen ;)

    Beitrag geaendert: 11.3.2007 18:37:29 von sneerfire
  5. http://de2.php.net/manual/de/function.preg-replace-callback.php
  6. Darf man noch erwähnen, dass das entsprechende HTML-Tag nicht <div class="quote"></div> sondern seit ewigen Zeiten <blockquote></blockquote> heißt?
    Damit spart man sich ein <div> und die extra CSS-Klasse.

    http://de.selfhtml.org/html/text/zitate_adressen.htm

    ... und dass sowas
    \[QUOTE=(\'|)(.*?)(\'|)\](...

    einen schönen XSS-Angriffspunkt bietet? Den Teilstring zwischen den einfachen Hochkommas bitte nicht einfach übernehmen, sondern vor der Ausgabe prüfen!

    http://de.wikipedia.org/wiki/XSS
  7. Autor dieses Themas

    s*******e


    Darf man noch erwähnen, dass das entsprechende HTML-Tag nicht <div class="quote"></div> sondern seit ewigen Zeiten <blockquote></blockquote> heißt?
    Damit spart man sich ein <div> und die extra CSS-Klasse.

    http://de.selfhtml.org/html/text/zitate_adressen.htm

    ... und dass sowas
    \[QUOTE=(\'|)(.*?)(\'|)\](...

    einen schönen XSS-Angriffspunkt bietet? Den Teilstring zwischen den einfachen Hochkommas bitte nicht einfach übernehmen, sondern vor der Ausgabe prüfen!

    http://de.wikipedia.org/wiki/XSS


    Und wie kann man dem XSS-Angriffspunkt umgehen? :mad:


  8. Darf man noch erwähnen, dass das entsprechende HTML-Tag nicht <div class="quote"></div> sondern seit ewigen Zeiten <blockquote></blockquote> heißt?
    Damit spart man sich ein <div> und die extra CSS-Klasse.

    http://de.selfhtml.org/html/text/zitate_adressen.htm

    ... und dass sowas
    \[QUOTE=(\'|)(.*?)(\'|)\](...

    einen schönen XSS-Angriffspunkt bietet? Den Teilstring zwischen den einfachen Hochkommas bitte nicht einfach übernehmen, sondern vor der Ausgabe prüfen!

    http://de.wikipedia.org/wiki/XSS


    Und wie kann man dem XSS-Angriffspunkt umgehen? :mad:


    Durch aufmerksames Lesen? :wink:
    Der Satz "Den Teilstring zwischen den einfachen Hochkommas bitte nicht einfach übernehmen, sondern vor der Ausgabe prüfen!" sagt eigentlich, was man tun muss.

    Der Knackpunkt ist das hier: (\'|)(.*?)(\'|)\] Wenn du den fettgedruckten Teilstring beim Einfügen in den Quelltext der Web-Seite nicht überprüfst, könnte ein Angreifer darüber böses, böses JavaScript einschmuggeln. Ich nehme mal an, da soll der Name des Zitierten angegeben werden. Also haben da zum Beispiel die einfachen Hochkommas »'« nichts drin zu suchen. Für diesen einen Fall könnte das hier helfen:

    $teilstring = preg_replace('/\'/', '&#39;', $teilstring);


    Aber nur für diesen Teilaspekt. Ich kenne ja den Rest des Scriptes nicht. Denn wenn beispielsweise die HTML-Ausgabe statt einfacher doppelte Hochkommas enthalten soll, muss das natürlich angepasst werden.

    Wenn man also HTML-Tags erzeugt, in deren Attributen benutzerdefinierte Zeichen vorkommen, dann sollte man darauf achten, ...

    ... dass diese Zeichen nicht mit den Begrenzungszeichen für die Attribute (eben die "Hochkommas") kollidieren, ...

    ... oder dass erst gar keine Begrenzungszeichen in den vom Benutzer definierten Strings vorkommen.

    Google und Wikipedia kennen sich mit XSS auch ganz gut aus. Man muss sie nur fragen ... ;-)
  9. Autor dieses Themas

    s*******e

    Danke ;)

    Ich benutzte htmlentities().
    Das dürfte auch JavaScript als normalen Text anzeigen! ;)

    Beitrag geaendert: 12.3.2007 18:31:49 von sneerfire
  10. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!