Плагин Math для добавления формул в топики

Написал плагин для ввода формул в топиках в MathML, накатал здесь описание, а оказывается я не могу постить активные ссылки :(

Поэтому просто оставлю это здесь: github.com/wyfinger/livestreet_math

upd:
2015-02-22 — MathML теги теперь фильтруются Jevix-ом, а не регуляркой в калбеке.
2015-03-08 — убрал `'style'=>'#text'`, это может повлиять на внешний вид формул, нужно проверять каждый раз, но Jevix органически не пропускает параметры html с кавычками.

16 комментариев

avatar
Для всех: livestreet.ru/blog/17820.html#comment281508
можно использовать если контент пишет ТОЛЬКО админ.
В противном случае вы откроете дыру на сайте.
avatar
Сделал все по уму, по крайней мере на мой непрофессиональный взгляд.
Внутри тега <math> режутся все теги не начинающиеся с «m», это не совсем верно с точки зрения спецификации MathML, но редактор, которым я пользуюсь по моему не генерирует таких тегов.

Пробовал сделать загрузку MathJax через Viewer_AppendScript, но при этом лоадер этой библиотеки не загружает почему-то саму библиотеку (лоадер выдает предупреждения слева внизу окна страницы).
avatar
Внутри тега режутся все теги не начинающиеся с «m»
Не поможет, можно обойти, сделав тег с «м».

Что пишет отладчик?
avatar
Вы не могли бы привести пример как можно организовать XSS или еще что в таком случае?
Чтобы я хоть представлял с чем бороться.

Про отладчик вы имели ввиду загрузку JS? Сейчас сделал загрузку через Viewer_AppendScript, вот что вижу в js ошибках браузера:

Посмотрите сами: http://energobook.ru/blog/6.html
avatar
Вы не могли бы привести пример как можно организовать XSS или еще что в таком случае?
Чтобы я хоть представлял с чем бороться.
Например
<msometag style="display: block; position: fixed; top: 0; left: 0; bottom: 0; right: 0; z-index: 999999;" onmousemove="простой процесс обработки и исчезновения"></msometag>

Да, тега такого нет, но с помощью «display: block;» он появится. А т.к. фильтрации нет, то внутри него анархия. И вариантов слишком много.

Подключение скриптов

// добавить таблицу стилей, расположение "/plugins/NAME/templates/skin/default/css/style.css"
$this->Viewer_AppendStyle(Plugin::GetTemplateWebPath(__CLASS__) . 'css/style.css');
// добавить скрипт, расположение "/plugins/NAME/templates/skin/default/js/init.js"
$this->Viewer_AppendScript(Plugin::GetTemplateWebPath(__CLASS__) . 'js/init.js');


Не знаю как вы добавили скрипт, т.к. у вас включено сжатие, но судя по всем основной скрипт ищет дополнительные скрипты по пути
http://energobook.ru/extensions/MathMenu.js?rev=2.5.0"
avatar
Попробовал, тег msometag, конечно, прошел, но ничего не появилось.

Я использовал CDN от MathJax, подключил так:
$this->Viewer_AppendScript('https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML');
avatar
Попробовал, тег msometag, конечно, прошел, но ничего не появилось.
Вы думали я вам полный/готовый 100% работающий эксплоит напишу? Здесь же дети! Я говорю что его просто можно реализовать, можете поверить. Но мы решаем проблему, а не пишем код для взлома.

Подключили вы вполне верно, суть в том, что тот скрипт подгружает другие скрипты для своей работы и пытается это делать с вашего сайта. Почему — не знаю. Наверное в документации к нему есть описание.

Дайте ссылку на описание подключения.
avatar
docs.mathjax.org/en/latest/start.html

Я подумаю над тем, чтобы добавить в исключения Jevix все теги MathML.
avatar
попробуйте отключить сжатие:
$this->Viewer_AppendScript('https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML', array('merge' => false));


А про теги в жевикс — лучшее решение.
avatar
Я человек неопытный, подскажите, имеет ли смысл публиковать плагин в каталоге?
avatar
да, конечно, возможно кому-то будет нужно
avatar
Т.е., как я понимаю, Viewer_AppendScript внедряет код из файла в свой кеш, а лоадер MathJax ищет доп файлы по относительному пути, естественно он их не находит, поэтому я и внедрял скрипт через DOM в событии $(window).on('load'…
Можно конечно включить в плагин все файлы библиотеки MathJax, но не хочентся как-то следить за ее актуальностью.
avatar
Обновление 2015-02-22 — MathML теги теперь фильтруются Jevix-ом, а не регуляркой в калбеке.
avatar
Не нужно разрешать 'style'=>'#text' — этим можно задефейсить сайт.

А так, все сделали чисто и аккуратно.
avatar
Спасибо, исправлю это и опубликую в каталоге.
avatar
Отправил плагин на модерацию.
Возможно скоро появится в каталоге.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.