Actions
Feature #12664
closedTinyMCE: report/remove malicous HTML/JS Code
Start date:
09.06.2021
Due date:
% Done:
50%
Estimated time:
Discuss:
Prio Planung:
No
Description
Damit TinyMCE sinnvoll genutzt wird, darf der Content nicht htmlspecialchar kodiert gespeichert werden.
Aber: wird der Code 1:1 gespeichert, koennte ein Angreifer Javascript injizieren und z.B. die PHP Session abgreifen (JS in einem HTML Attribut, oder einfach <script>...
).
Es ist wichtig den Code zu checken und entweder zu bereinigen oder abzulehnen.
Related issues
Updated by Carsten Rose over 2 years ago
Vorschlag:
- FE.typ=Editor/TinyMCE werden bei default 'bereinigt'
- FE.parameter.cleanHtml=1 (default) wenn Editor=TinyMCE.
- Der Parameter kann auf '0' gesetzt werden um das Cleanung abzuschalten.
- Es ist wichtig das ein 'Clean' gemacht wird und kein 'Reject' (also keine Exception werfen bei unlauterem Code). Grund:
- Wenn aus einem Worddokument viel Content kopiert wird, soll dieser bereinigt gespeichert werden
- Wuerde er zurueck gewiesen muesste, der User umstaendlich Stueck fuer Stueck versuchen den problematischen Teil zu finden - das wird niemand machen und stattdessen sagen 'unbrauchbares System'.
- Der Parameter cleanHtml=1 kann auch bei anderen FE.Elementen gesetzt werden. Dort ist der Default 0, und er muss aktiv gesetzt werden.
- Das setzen des Parameters macht nur Sinn bei FE.encode=none|single tick.
Anmerkung:
- Bekannte Probleme: https://html5sec.org/.
- Das entfernen / saeubern sollte nicht mit einem eigenen HTML Parser erfolgen (zu aufwendig, langsam)
- Genau unser Fall, aber keine Loesung: https://stackoverflow.com/questions/58759212/php-securing-a-users-full-html-file-against-xss
- Best Practice um einen DOM zu erstellen und zu bewerten: https://gist.github.com/lyquix-owner/9dd5eee80b8aaee2bd968e3a48641909
- Cleaning libs
- Check wie der DOM Parser auf kaputtes HTML reagiert. https://html5sec.org/#91
Order:
- 1) UTF8 Codes ersetzen (check ob der dom parser das bereits macht?)
- 2) lower case (check ob der dom parser das bereits macht?)
- 3) Blacklist Tags entfernen
- 4) Blacklist Attribute entferen
- 5) Alle Attribute die mit
javascript:...
beginnen (kann bei src und href benutzt werden), entfernen.
cleanHtml= 0|1
cleanHtmlAttribute = on.*,srcdoc,srcset
cleanHtmlAttributeMaxLength = 50 - Damit sollen ungewoehnlich lange Attribute entfernt werden.
cleanHtmlTag=script,button,source,iframe,comment,object
Updated by Carsten Rose almost 2 years ago
- Target version changed from next3 to next4
Updated by Carsten Rose over 1 year ago
- Related to Feature #14320: Allow specific HTML Tags and Attributes: general, TinyMCE added
Actions