Javascript в MediaWiki

Сегодня возникла задача запустить в вики-странице  javascript. Кодить скрипт в самой страничке не рекомендуется, и такая возможность запрещена по умолчанию, потому что вики-страницу может отредактировать кто угодно, а значит и подменить ваш скрипт на любой другой, в том числе и зловредный, тоже сможет кто угодно.

К счастью, в излюбленном мною движке MediaWiki, есть возможность добавить парсеру обработчики своих тегов. Я решил добавить свой тег и реализовал функцию, которая возвращает мне нужный код на javascript. В результате, можно будет использовать только мою функцию, и никакого левого кода выполняться не будет. Но вот незадача: в готовом HTML посередине скрипта у меня оказываются неверные тэги (разрывы строк, преобразованные в <p>, и неожиданно появившийся тэг <pre>), хотя я явно запретил дальнейший парсинг движком вики. Пришлось весь скрипт писать в одну строчку. В коде это выглядит просто ужасно и самое страшное, что если кто-то догадается его отформатировать, то всё запорется.

Час был потерян на то, чтобы понять, почему добавляются лишние теги. Но так ничего и не получилось, оставил как есть.

Теперь о безопасности, передаваемых в качестве параметров в Javascript из wiki. Я сделал обратный счётчик, чтобы считать, сколько осталось времени до нашей свадьбы. Javascript нужен для того, чтобы обновлять его каждую секунду.  Вот так выгядит вызов:

{#countdown: 14 | 7 | 2009 }

Обязательно нужно проверять параметры на валидность, что день, месяц и год являются числами в допустимых пределах. Если не сделать такую проверку, то злоумышленник может передать в скрипт свой код, например вот так:

{#countdown: alert(«Вас взломали») | 7 | 2009 }

Получается, что если вместо операнда, написать любое выражение, оно будет обработано интерпретатором. Это очень опасно.

Запись опубликована в рубрике Uncategorized с метками , , . Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *