BB-Code: [img] -> Sicherheitslücke?

ROFLER

Grünschnabel
Hallo,
ich benutze bei einem Skript von mir BBCodes mit [img]-Tags,
jedoch meinten einige Seitenbesucher das dieser [img]-BBCode
eine Sicherheitslücke darstellen würde,
da man ja auch .php Dateien damit anzeigen kann.
Der BBCode wird bei mir folgendermaßen umgewandelt:
PHP:
$str = preg_replace('+\[img\](.*)\[\/img\]+Uis', '<img src="${1}" alt="" />', $str);

Stellt das nun wirklich eine Sicherheitslücke dar?
Kann man das einbinden von .php Dateien (mit preg_replace) verhindern?


mfg
 
Du kannst das Ausführen von unerwünschten Code verhindern, indem du keine Direktlinks zu den Bildern hast.

Gruss
 
Oder die Angabe vorher prüfen... Aus dem Tag die URL holen, zerlegen und Dateiendung prüfen...
Wenns nen Pic is, is egal, wenns keins is, dann wird der Tag komplett gelöscht/ignoriert...
 
jedoch meinten einige Seitenbesucher das dieser [img]-BBCode eine Sicherheitslücke darstellen würde
Sicherheitslücke auch nur im weitesten Sinn. Über <img src="http://fremdedomain.biz/boese.php" alt="Bild" /> lässt sich kein PHP-Code einbinden und evaluieren, es ist nur bedenklich, da hinter der Datei eventuell Datenerfassende Dienste stehen, die beim Zugriff auf die Datei IP und dergleichen Loggen. Auch weist .php auf dynamisch erzeugte Inhalte hin, die nicht immer so das Grüne darstellen müssen. Prinzipiell ist die Idee einer Verfeinerung des Regex aber nichtsdestotrotz nur vergebliche Mühe, kann man relativ leicht mit zB mod_rewrite URLs serverintern umleiten. Was die Endung .jpg hat, muss noch lange nicht JPEG sein. Leicht nachvollziehen lässt sich das sogar lokal. Einfach mal eine kleine Textdatei mit der Dateierweiterung .jpg speichern. Ist es deshalb eine Bilddatei? Nicht wirklich, auch wenn die Erweiterung das suggerieren möchte. Sicher kann man sich noch nicht mal dann sein, wenn man die Datei einem MIME-Check unterzieht, also den Dateiheader auseinanderfummelt; Oder das Analysieren einer Datei... Schließlich weiß man dann doch nie, wie die Datei genau erzeugt wird, und ob eventuell eine Routine Daten erfasst.

Der BBCode wird bei mir folgendermaßen umgewandelt:
PHP:
$str = preg_replace('+\[img\](.*)\[\/img\]+Uis', '<img src="${1}" alt="" />', $str);

Stellt das nun wirklich eine Sicherheitslücke dar?
Ja, aber anders als du denkst. Der Benutzer könnte ganz einfach ein paar Zeichen wie ", >, etc einbetten, und schon ist der Sinn der Tags futsch.
PHP:
$str = preg_replace('+\[img\](.+)\[\/img\]+Uise', "'<img src=\"' . htmlentities( $1 ) . '\" alt=\"Bild\" />', $str);
Hätte es gerne über nen Replace via Callback gelöst, da sauberer, aber gerade fehlen mir dazu leider gerade die Ambitionen ;)
 
Zuletzt bearbeitet von einem Moderator:
So müsste es ungefähr aussehen:

PHP:
'~^http\:\/\/(.*?)\.[jpg|gif|png]{3}$~'
 
Am Besten würde ich vorschlagen, alle lesen sich nochmal den Beitrag von maeTimmae durch ;)

Dateiendungen sind Schall und Rauch.

Angenommen, da wird etwas eingebunden mit der Endung *.jpg ...niemand wird je herausbekommen, worum es sich dabei wirklich handelt.
Es ist kein Problem, auch die Dateiendung jpg durch PHP verarbeiten zu Lassen, und wenn das PHP-Skript eine JPG-Datei ausliefert, scheint alles in Butter....muss es aber nicht.

Die Gefahr besteht in der genannten Datenerfassung, z.B. des Raubs einer Session-ID durch Auslesen des HTTP_REFERER, wie man das Verhindern kann, wurde auch gesagt: Keine direkten Verweise auf das Bild(am Besten überhaupt keine direkten Verweise auf externe Quellen überhaupt)...sondern eine spezielle Seite zwischenschalten, welche bspw. ohne Sessions arbeitet....keine Session==keine Session-ID, die gestohlen werden könnte.
 
Die Gefahr besteht in der genannten Datenerfassung, z.B. des Raubs einer Session-ID durch Auslesen des HTTP_REFERER, wie man das Verhindern kann, wurde auch gesagt: Keine direkten Verweise auf das Bild(am Besten überhaupt keine direkten Verweise auf externe Quellen überhaupt)...sondern eine spezielle Seite zwischenschalten, welche bspw. ohne Sessions arbeitet....keine Session==keine Session-ID, die gestohlen werden könnte.

Mein reden s.o., nur hatte ich es bisschen kürzer gefasst.;-)
 
Es ist kein Problem, auch die Dateiendung jpg durch PHP verarbeiten zu Lassen, und wenn das PHP-Skript eine JPG-Datei ausliefert, scheint alles in Butter....muss es aber nicht.

Aber das geht doch nur mit Zugriff auf die .htaccess(?!)

Für die Validierung ob es sich um ein Bild handelt, getimagesize() verwenden.
 
@Sven Mintel

maeTimmae, hat natürlich recht, aber nichts desto trotz, dürfen nur die gegebenen Dateiendungen eingebunden werden, mehr auch nicht denn im Endeffekt ist es ein BBCode NUR für Bilder und nichts anderes.

@Gumbo

Ist das Risiko eines CSRF Angriffs nicht eher gering oder Unterschätz ich es? Wäre nett wenn du den ~Risikograd einstufen könntest^^ Gefährlich ist es wenn die Session ID mit in der URL übergeben wird, aber sonst eher nicht oder liege ich da falsch?

XST ist auch eine Angriffsmöglichkeit wobei da das Risiko eher gering ist. ;)
 

Neue Beiträge

Zurück