Raw HTML
Проблема: есть две разнородные задачи – поместить в вику plain-текст, так чтобы он отобразился немодифицированным; и поместить в вику html, так чтобы он отобразился немодифицированным, т.е. отрендерился браузером.
Предлагаемое решение:
- Синтаксис двойных кавычек решает первую задачу. На их содержимом выполняется
htmlspecialchars()
. Сделано.
- Вторую задачу решает новый синтаксис. Сделано.
- Предлагается
<# #>
.
- Предлагается
- Во второй задаче в зависимости от опции в конфигурационном файле удаляется или не удаляется опасный html-код. Сделано.
- см. SafeHTML - anti-XSS HTML parser
Опасный код – это:
- аттрибуты on*, data*, action="javascript:", href="javacript:", dynsrc.
- таги <object>, <layer>, <ilayer>, <frame>, <iframe>, <script>, <embed>, <applet>, <bgsound>, <style>, <link>, <body>, <meta>, <frameset>.
- убивать опасный css.
- position: (но не backgound-position:)
- @import
- @font-face:
- expression
- behavior
- Для subject предлагается делать
strip_tags()
с неким небольшим набором разрешённых тегов, типа i, a, b, s, strong, strike, u. Аттрибут style также удалять.