[RegExp] Problem
lima-city → Forum → Programmiersprachen → Sonstige Programmiersprachen
angreifer
angriffspunkt
anzeigen
attribut
ausgabe
beispiel
beitrag
benutzer
extra
ineinander
klasse
knackpunkt
manual
nehme mal
paste
quelltext
spart
tag
teilaspekt
vorkommen
-
(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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
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 -
http://de2.php.net/manual/de/function.preg-replace-callback.php
-
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 -
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? -
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?
Durch aufmerksames Lesen?
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('/\'/', ''', $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 ... -
Danke ;)
Ich benutzte htmlentities().
Das dürfte auch JavaScript als normalen Text anzeigen! ;)
Beitrag geaendert: 12.3.2007 18:31:49 von sneerfire -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage