Project

General

Profile

Actions

Feature #14320

closed

Allow specific HTML Tags and Attributes: general, TinyMCE

Added by Enis Nuredini almost 2 years ago. Updated over 1 year ago.

Status:
Closed
Priority:
Normal
Assignee:
Enis Nuredini
Target version:
Start date:
14.06.2022
Due date:
12.12.2022
% Done:

0%

Estimated time:
Discuss:
Prio Planung:
No
Vote:

Description

Ausgangslage:
Darstellungsfehler beim Infoterminal resultierend von geladenen Datenbankdaten die als HTML Tags eingetragen waren.
Spezifisch:
Ein Eintrag in der math.notiz Tabelle: "</div> Beispieltext". Wird via AS _file geladen ('t:',notiz.notiz).

Lösung:
Es braucht eine serverseitige Lösung im QFQ um bestimmte Tags herauszufiltern.
Z.b. folgende Erlauben: bold, underline, italic, h2-h6


Related issues

Related to QFQ - Feature #12664: TinyMCE: report/remove malicous HTML/JS CodeRejectedCarsten Rose09.06.2021

Actions
Related to QFQ - Feature #12039: Missing htmlSpecialChar() in pre processing on form submitNew18.02.2021

Actions
Related to QFQ - Feature #11702: HTML Special Char makes no sense for 'allbut' if '&' is forbiddenNewCarsten Rose06.12.2020

Actions
Related to QFQ - Feature #7239: TinyMCE: html tag whitelistRejectedCarsten Rose13.11.2018

Actions
Related to QFQ - Feature #3708: Form: input - 'specialchars', 'none' ... gewisse tags erlauben, andere verbietenRejectedCarsten Rose12.05.2017

Actions
Related to QFQ - Feature #3646: Moeglichkeit HTML Tags in Reports auszugeben (zu enkodieren: htmlspecialchars)Some day maybe28.04.2017

Actions
Related to QFQ - Feature #880: Security: PHP, SQL Injection, XSSNewSupport: Web13.08.201525.12.2019

Actions
Actions #1

Updated by Carsten Rose almost 2 years ago

  • Related to Feature #12664: TinyMCE: report/remove malicous HTML/JS Code added
  • Related to Feature #12039: Missing htmlSpecialChar() in pre processing on form submit added
  • Related to Feature #11702: HTML Special Char makes no sense for 'allbut' if '&' is forbidden added
Actions #2

Updated by Carsten Rose almost 2 years ago

  • Related to Feature #7239: TinyMCE: html tag whitelist added
  • Related to Feature #3708: Form: input - 'specialchars', 'none' ... gewisse tags erlauben, andere verbieten added
  • Related to Feature #3646: Moeglichkeit HTML Tags in Reports auszugeben (zu enkodieren: htmlspecialchars) added
  • Related to Feature #880: Security: PHP, SQL Injection, XSS added
Actions #3

Updated by Carsten Rose almost 2 years ago

  • Subject changed from HTML Tags in Texteditor und DB to Allow specific HTML Tags and Attributes: general, TinyMCE

Ich schreibe das Ticket mal neu, so dass die Auftragslage klarer wird:

Ausgangslage: Darstellungsfehler beim Infoterminal resultierend von geladenen Datenbankdaten die als HTML Tags eingetragen waren.

Spezifisch: Ein Eintrag in der math.notiz Tabelle: "</div> Beispieltext". Wird via AS _file geladen ('t:',notiz.notiz).

Summary: mit QFQ waere das nicht passiert, da wird alles by default HTML Specialchar kodiert gespeichert. Aber: manchmal brauchen wir Tags. Z.B. bei TinyMCE - doch nicht alle HTML Tags sollte moeglich sein.

Ausnahme 1: TinyMCE - dort sind HTML Tags inkl. Attributen erlaubt.

Ausnahme 2: htmlspecial char wird fuer spezifische FormElemente deaktiviert.

Die Related Tickets sind bereits teilweise Tickets zu genau dem Thema (also Duplikate). Wir sollten zuerst ein Konzept machen.

Gedanken (kann geloescht werden wenn Konzept fertig ist)
--------------------------------------------------------

Neuer FE.parameter:
htmlAllow=b,i,underline,li,ul,h1,h2,h3,h4,h5,h6,img
tagAllow=???

Aufgabe 1: Templates in der QFQ Doku zu TinyMCE vorbereiten, wie man TinyMCE konfiguriert das nur wenige Auszeichungsoptionen angeboten werden - z.B. bold, underline, italic, itemlist, enumerate, h2-h6, image

Aufgabe 2: Auf der Serverseite in QFQ sicherstellen das alles verbotene gefiltert wird. Der gefilterte Code muss dann in TinyMCE neu geladen und angezeigt werden (sollte eigentlich bereits passieren).

Aufgabe 3: Der HTML und Attribute Tag Filter sollte via FE.parameter auch fuer andere Situationen als TinyMCE aktivierbar sein.

Actions #4

Updated by Enis Nuredini almost 2 years ago

  • Status changed from New to ToDo
Actions #5

Updated by Enis Nuredini over 1 year ago

  • Status changed from ToDo to In Progress
Actions #6

Updated by Enis Nuredini over 1 year ago

  • Status changed from In Progress to Feedback
  • Prio Planung set to No

Die Funktion mit dem Parameter htmlAllow wurde implementiert. Hiermit kann der User alle Tags komma separiert eintragen, welche akzeptiert werden. Gefiltert werden die Tags auf Client- sowie Serverseite bei TinyMce. Ausserhalb von TinyMce wird das Filtern auf der Serverseite ausgeführt. Nicht zugelassene Tags werden ausgeschnitten und der Inhalt wird behalten.

TinyMce:
Die Konfiguration des TinyMce wird anhand des Parameters htmlAllow automatisch zusammen gebaut und entsprechend nur die Optionen für Toolbar und Layout angezeigt welche effektiv zugelassen werden. Auch für Bilder, Urls oder Tables werden mehrere Attribute benötigt die nun von QFQ selbst gesetzt werden falls img,table oder a als Parameter mitgegeben werden. Für die bekannten Tags u,ins,del oder s wird der Parameterwert textDecoration verwendet, da TinyMce diese Tags selbst nicht verwendet sondern stattdessen span mit dem style Attribut.
Die Default Konfiguration von TinyMce wird damit überschrieben. Das Setup des TinyMce passt sich so dynamisch an die Angaben von htmlAllow an.

Alle weiteren FormElemente:
Auch ausserhalb von TinyMce kann htmlAllow verwendet werden. Die Parameterwerte u, ins, del, s und textDecoration erlauben automatisch den Tag span zwecks vollständiger Kompatibilität mit TinyMce. Beispiel Anwendungsfall:
htmlAllow=p,br,img,table,u,ol,b,h2,h3,h5,sup
Es ist die Angabe von allen existierenden Tags möglich. Für ol und ul muss li nicht angebenen werden weil diese Angabe selbst von QFQ gesetzt wird. Ebenfalls müssen für table die Tags td,th,tbody oder thead nicht mitangegeben werden, da diese auch automatisch gesetzt werden falls table eingetragen ist.

Zum Thema erlauben von Attributen:
Es wurde versucht eine Funktion zu implementieren die Attribute erkennt und danach mithilfe einer Liste vergleicht. Dabei wurde es zu aufwendig alle Fälle abzudecken. Sobald mehrere Attribute im gleichen Tag oder tiefer verschachtlete Tags zur Anwendung kamen, scheiterten die bisherigen Versuche.
Als saubere Lösung und Security Part der Funktion wird nun die open source lizenzierte library html-purifier von Edward Z. Yang verwendet (https://htmlpurifier.org). Damit werden mithilfe einer whitelist alle Attribute bereinigt die eine XSS Attacke ermöglichen. Ebenfalls werden unsaubere html Inhalte korrigiert (z.b. Inhalte mit öffnendem aber fehlendem schliessenden Tag werden geschlossen).

Merge Request ist nun bereit. Falls dies mit der neuen QFQ Version herausgeht, dann nicht vergessen in den Release Notes den Autor vom html-purifier zu erwähnen. Die Library muss dann noch zum Ordner der Release Version hinzugefügt werden.

Actions #7

Updated by Enis Nuredini over 1 year ago

  • Assignee changed from Enis Nuredini to Carsten Rose
Actions #8

Updated by Carsten Rose over 1 year ago

  • Due date set to 12.12.2022
  • Assignee changed from Carsten Rose to Enis Nuredini
  • Target version changed from next3 to 22.12.0

Ich finde keinen offenen Branch mit #14320 - ich denke der Code ist schon drin. Was ist mit dem letzten Kommentar: "Die Library muss dann noch zum Ordner der Release Version hinzugefügt werden."?

Actions #9

Updated by Enis Nuredini over 1 year ago

  • Status changed from Feedback to Closed

Wurde schon gemerged. Bei Release Version ging es um die Einbindung der neuen Library ins make bootstrap. Dies wurde auch schon gemacht. Das Ticket kann geschlossen werden.

Actions

Also available in: Atom PDF