Hallo,
aktuell arbeite ich für meine Issue-Tracker-Applikation an den Eingabeformularen für Benutzer. Um XSS grundsätzlich zu vermeiden habe ich bereits von Anfang an auf BBCodes gesetzt. Nun habe ich aber festgestelllt, dass meine Klasse trotz allem nicht 100% sicher ist, kann den Fehler jedoch selbst nicht finden.
Es geht mir darum, dass aus dem BBCode HTML generiert wird und das es keine Angriffe durch XSS geben kann.
Danke im Voraus,
Simon Strasser
aktuell arbeite ich für meine Issue-Tracker-Applikation an den Eingabeformularen für Benutzer. Um XSS grundsätzlich zu vermeiden habe ich bereits von Anfang an auf BBCodes gesetzt. Nun habe ich aber festgestelllt, dass meine Klasse trotz allem nicht 100% sicher ist, kann den Fehler jedoch selbst nicht finden.
Es geht mir darum, dass aus dem BBCode HTML generiert wird und das es keine Angriffe durch XSS geben kann.
PHP-Code:
<?php
class bbcode
{
public static function parseToHTML($input)
{
$input = htmlentities($input, ENT_QUOTES);
$input = strip_tags($input);
$input = str_replace("[b]", "<b>", $input);
$input = str_replace("[/b]", "</b>", $input);
$input = str_replace("[i]", "<i>", $input);
$input = str_replace("[/i]", "<i>", $input);
$input = str_replace("[u]", "<u>", $input);
$input = str_replace("[/u]", "</u>", $input);
$input = str_replace('\r\n',"<br>",$input);
$input = str_replace('\r',"<br>",$input);
$input = str_replace("[img]../../js/", "[img]/js/", $input);
$input = preg_replace('/\[url=([^() ]+).*\]([^\]].*)\[\/url\]/', '<a href="$1">$2</a>', $input);
$input = preg_replace('/\[color=([^ ]+).*\]([^\]].*)\[\/color\]/', '<font color="$1">$2</font>', $input);
$input = preg_replace('/\[img\]([^\]].*)\[\/img\]/', '<img src="$1" />', $input);
$input = preg_replace('/\[quote\]([^\]].*)\[\/quote\]/', '<div class="quote">$1</div>', $input);
$input = preg_replace('/\[code\]([^\]].*)\[\/code\]/', '<div class="code">$1</div>', $input);
$input = str_replace("[img]", '<img src="', $input);
$input = str_replace("[/img]", '" />', $input);
$input = str_replace("]<img", '"><img', $input);
$input = str_replace('[/img">', '" />', $input);
$input = str_replace('javascript:', '', $input);
return $input;
}
}
Simon Strasser
Kommentar