Как разрешить href = 'javascript: myFunc ()' с очистителем HTML? - PullRequest
1 голос
/ 13 апреля 2011

У меня есть некоторый HTML-код, который я написал локально, и хочу запустить его через очиститель HTML.Он полностью создан мной, поэтому я знаю, что XSS-уязвимостей нет.Я пытаюсь запустить его через очиститель, но href = 'javascript: myFunc ()' анализируется независимо от того, что я пытаюсь.

Моя текущая настройка:

$string = file_get_contents($myHTMLFile);
$schemes = array (
    'http' => true,
    'https' => true,
    'mailto' => true,
    'ftp' => true,
    'nntp' => true,
    'news' => true,
    'javascript' => true,
);
$config = HTMLPurifier_Config::createDefault();
$config->set('URL.AllowedSchemes', array($schemes));
$purifier = new HTMLPurifier($config);
$string = $purifier->purify($string);

Thisвообще не работает - весь javascript удален.

Я просмотрел все параметры конфигурации HTML Purifier, но не могу найти то, что мне нужно.Есть ли ответы?

Заранее спасибо

1 Ответ

1 голос
/ 14 апреля 2011

Простой ответ: не используйте HTML Purifier. Вместо этого используйте что-то вроде HTML Tidy.

Более сложный ответ: не используйте javascript: URL; вместо этого присоединяйте атрибуты класса к ссылкам, которые вы хотите иметь JavaScript, а затем обработчик JavaScript ищет ссылки с этим классом и присоединяет код JavaScript в качестве обработчика onClick.

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

...