Welchen Sinn hat die bbcode_uid?

Beschreibung: phpBB 3.x wandelt BBCodes beim Abspeichern in eine Zwischenversion um, welche zusätzlich einen seltsamen Code enthält, den sogenannten bbcode_uid

Kategorie: Allgemeine Funktionen

Link zu diesem Artikel: Alles auswählen

[url=https://www.phpbb.de/kb/viewarticle?a=54&sid=28fd41b8dd00d8e9bef39bf858776e9c]Knowledge Base - Welchen Sinn hat die bbcode_uid?[/url]

phpBB 3.x wandelt BBCodes beim Abspeichern in eine Zwischenversion um, welche zusätzlich einen seltsamen Code enthält, den sogenannten bbcode_uid (BBCode unique identifier). Dieser besteht aus 6 Buchstaben und/oder Ziffern.

Warum überhaupt ein Zwischenschritt?

Da seit phpBB 2.x der HTML-Code der BBCodes Template-spezifisch ist (bbcode.html im Template-Verzeichnis), kann die endgültige Umwandlung erst beim Anzeigen des Beitrages vorgenommen werden (der Autor des Beitrages könnte ja ein anderes Template ausgewählt haben als derjenige, der ihn liest). Der Zwischenschritt hat den Sinn, dass trotzdem ein Großteil der zeitaufwendigen Prüfungen bereits beim Abspeichern des Beitrages (und somit nur einmal) durchgeführt werden müssen.

Prinzip bei phpBB erklärt

Im Wesentlichen basiert dies darauf, dass zwei verschiedene Ersetzungsfunktionen verwendet werden:
  • preg_replace ist eine komplexe Funktion, welche mittels regulärer Ausdrücke z.B. die Möglichkeit bietet, ein [starttag] und ein [/endtag] einander zuordnen zu können. Dies ist nötig, damit böswillige Benutzer beispielsweise nicht durch einen Beitrag, der nur aus dem Tag [b] besteht, bewirken, dass der komplette Rest der Seite fett dargestellt wird.
  • str_replace hingegen kann lediglich einen festen Text durch einen anderen festen Text ersetzen, ist dafür jedoch um ein Vielfaches schneller als preg_replace.
Beim Abspeichern wird zuerst der Beitragstext mit preg_replace geparst, um zusammengehörige Start-/Endtags zu erkennen. Diese werden durch die gleichen BBCode-Tags mit der angehängten bbcode_uid ersetzt. Beispiel: [x]Hallo[/x] wird zu [x:abc123]Hallo[/x:abc123]. Somit werden die "nicht böswilligen" BBCodes gekennzeichnet, um diese dann beim Anzeigen der Funktion str_replace übergeben zu können, welche performanceschonend alle Vorkommen von [x:abc123] durch <x> sowie [/x:abc123] durch </x> ersetzen kann.
Um zu verhindern, dass jemand diesen Schutz umgeht, indem er direkt [x:abc123] schreibt, wird die bbcode_uid bei jedem neuen/bearbeiteten Beitrag zufällig erstellt und mit in der Datenbank abgespeichert.