Проблема с insecure input в CMS MediaWiki

В процессе эксплуатации вики CMS MediaWiki столкнулся с проблемой «insecure input». Когда добавляешь CSS код, то на выходе в атрибуте style вместо добавленного кода находится лишь один комментарий такого вида «insecure input», в коде это выглядит примерно так:

<div style = "/* insecure input */"></div>

Что делать, как с этим бороться? Давайте разбираться.
Вывод подобного это работа защитного механизма CMS, который запрещает добавлять «небезопасный» код на страницы сайта. Надо либо смериться с этим ограничением для безопасности, либо отключить данный механизм. Об этом дальше и пойдёт речь.

Отключить его очень просто. Редактируем файл «/includes/Sanitizer.php». Находим подобные строки и просто закомментируем срабатывание механизма:

// Reject problematic keywords and control characters
if ( preg_match( '/[\000-\010\016-\037\177]/', $value ) ) {
return '/* invalid control char */';
} elseif ( preg_match( '! expression | filter\s*: | accelerator\s*: | url\s*\( | image\s*\( | image-set\s*\( !ix', $value ) ) {
// Отключаем insecure input
//return '/* insecure input */';
}
return $value;

В условии видно на какие случаи будет срабатывать эта защита. Можно просто подредактировать это регулярное выражение, если нужно отключить не весь этот механизм защиты. Я же не стал мучиться и сразу всё выключил т.к. считаю использование подобных слов в HTML-коде не особо опасными.

В разных версиях CMS файл Sanitizer.php может меняться. Лично я тестировал на версии 1.21.1 и эти строки начинались на строке 872 файла Sanitizer.php. В другой версии может быть иначе. В любом случае найти что-то подобное можно по словосочетанию «insecure input», которое встречается в коде.

Ниже приведу ссылки с описанием решения этой проблемы если моя статья не помогла. Кстати, везде предоставляются какие-то очень муторные решения этой проблемы, т.е. надо довольно много всего править в файле Sanitizer.php. Моё же решение подразумевает закомментирование всего одной строки кода. Хотя конечно это зависит от версии CMS и конкретного Sanitizer.php т.к. в разных версиях его содержимое меняется.

Ссылки