Raw HTML

Проблема: есть две разнородные задачи – поместить в вику plain-текст, так чтобы он отобразился немодифицированным; и поместить в вику html, так чтобы он отобразился немодифицированным, т.е. отрендерился браузером.


Предлагаемое решение:

  1. Синтаксис двойных кавычек решает первую задачу. На их содержимом выполняется htmlspecialchars(). Сделано.
  2. Вторую задачу решает новый синтаксис. Сделано.
    1. Предлагается <# #>.
  3. Во второй задаче в зависимости от опции в конфигурационном файле удаляется или не удаляется опасный html-код. Сделано.
    1. см. 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 также удалять.