Überprüfungen beim hinzufügen von BBCodes :)

KD3

Erfahrenes Mitglied
hi leute

Ich wollte euch kurz einmal fragen ob ihr vielleicht mir erklären könntet worauf man achten muss, wenn man ein BBCode System in der Seite integriert hat :D z.B das <script>-Atributt soll nicht existieren, aber wie soll das im Code ablaufen? mit Regulären Ausdrücken? danke im voraus

MfG
KD3
 
Dafür kann man z. B. [phpf]strip_tags[/phpf] benutzen und nur ein paar Tags erlauben, anhand einer Whitelist.

Ansonsten bevorzuge ich persönlich einen richtigen BB Code der auch die typische Syntax hat, wie hier im Forum z. B.

Dadurch kann man eigentlich den Rest durch [phpf]htmlspecialchars[/phpf] jagen und sich sicher(er) fühlen.
 
Genauso wie hier im Forum möchte ich das auch gerne, weiß nur nicht wie ich das realisieren soll... genau BBCodes sind jetzt mein problem das mit den Smilies hab ich schon hinbekommen nur hab ich schon ca. seit 1 1/2 Tagen Probleme beim erstellen der BBCodes :(
 
PHP:
// Bold
$text = str_replace("[ b ]", "<b>", $text);
$text = str_replace("[ /b ]", "</b>", $text);
// Italic
$text = str_replace("[ i ]", "<i>", $text);
$text = str_replace("[ /i ]", "</i>", $text);
// Underline
$text = str_replace("[ u ]", "<u>", $text);
$text = str_replace("[ /u ]", "</u>", $text);
// URLs
$url_pattern[] = "#\[url\]((www)\.([\w\#$%&~/.\-;:=,?@\]+]+|\[(?!url=))*?)\[/url\]#is";
$url_replacement[] = "<a href=\"http://$1\">$1</a>";
$url_pattern[] = "#\[url\]([\w]+?://([\w\#$%&~/.\-;:=,?@\]+]+|\[(?!url=))*?)\[/url\]#is";
$url_replacement[] = "<a href=\"$1\">$1</a>";
$url_pattern[] = "#\[url=([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
$url_replacement[] = "<a href=\"$1\">$2</a>";
$url_pattern[] = "#\[url=((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
$url_replacement[] = "<a href=\"http://$1\">$3</a>";
$text = preg_replace($url_pattern, $url_replacement, $text);

Hier mal ein Auszug aus einer Funktion die ich benutze.
Die URLs sind aus dem phpBB entnommen.

Mal als kleiner Anstoß.
 
OK :) danke sehr ;) Das mit den Regulären Ausdrücken kapier ich in diesem Codeschnipsel garnicht :D Könntest du bitte mir auch erklären wie ich es mit OnClick wie hier im Forum machen könnte Also wenn man z.B in php draufklickt wird direkt der Text der markiert ist mit den Tags beschmückt sozusagen :) Wie mit den Smilies t das bestimmt nicht denk ich mal :)

MfG
KD3
 
Dein Vorschlag ermöglicht leider das Injizieren von Schadcode, Felix.
[url="javascript://%0Aalert('XSS')"]foobar[/url]
 
Hm, also bei mir passiert das nicht?

Hier die gesamte Funktion:

PHP:
function bbCode($text) {
			// HTML Entities
			$text = htmlentities($text);
// Bold
$text = str_replace("[ b ]", "<b>", $text);
$text = str_replace("[ /b ]", "</b>", $text);
// Italic
$text = str_replace("[ i ]", "<i>", $text);
$text = str_replace("[ /i ]", "</i>", $text);
// Underline
$text = str_replace("[ u ]", "<u>", $text);
$text = str_replace("[ /u ]", "</u>", $text);
// URLs
$url_pattern[] = "#\[url\]((www)\.([\w\#$%&~/.\-;:=,?@\]+]+|\[(?!url=))*?)\[/url\]#is";
$url_replacement[] = "<a href=\"http://$1\">$1</a>";
$url_pattern[] = "#\[url\]([\w]+?://([\w\#$%&~/.\-;:=,?@\]+]+|\[(?!url=))*?)\[/url\]#is";
$url_replacement[] = "<a href=\"$1\">$1</a>";
$url_pattern[] = "#\[url=([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
$url_replacement[] = "<a href=\"$1\">$2</a>";
$url_pattern[] = "#\[url=((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is";
$url_replacement[] = "<a href=\"http://$1\">$3</a>";
$text = preg_replace($url_pattern, $url_replacement, $text);  
// YouTube Object
// gekürzt
// GoogleVideo Object
// gekürzt
// LineBreaks
$text = nl2br($text);
return $text;
}

Mein TestSkript:


$foo = "[url=javascript://%0Aalert('XSS')]foobar[/url]";
$bar = "www.flexmex.net";
echo bbCode($foo);
echo "<br/>".bbCode($bar);

Ausgabe:
[url=javascript://%0Aalert('XSS')]foobar[/url]<br/>
<a href="http://www.flexmex.net">www.flexmex.net</a>

Die Anführungszeichen musste ich entfernen, da mein Tag diese nicht akzeptiert momentan...
 
Was habe ich denn da geschrieben? Die Klammern und einfachen Anführungszeichen müssen natürlich auch kodiert werden, dann klappt’s:
[ plain]foobar[ /plain]
 
Man könnte doch eigentlich mit den POSIX Regulären Ausdrücken das Wort "javascript" unterdrücken oder nicht? dann wäre das problem aus der welt geschafft :D

MfG
KD3
 
Ich habs mir etwas einfacher gemacht und jage alles noch einmal durch [phpf]urldecode[/phpf].
Ist natürlich etwas grob gezimmert, aber es funktioniert... ;)

Vielleicht hat Gumbo ja einen optimierten Ausdruck dafür? Dann müsste man es nicht doppelt machen.
 
Zurück