.
PHP Markdown имеет параметр очистки, но, похоже, он нигде не рекламируется. Взгляните на верхнюю часть класса Markdown_Parser
в markdown.php
(начинается со строки 191 в версии 1.0.1m). Нас интересуют строки 209-211:
# Change to `true` to disallow markup or entities.
var $no_markup = false;
var $no_entities = false;
Если вы измените их на true
, разметка и сущности, соответственно, должны быть экранированы, а не вставлены дословно. Похоже, что нет никакого встроенного способа изменить их (например, через конструктор), но вы всегда можете добавить его:
function do_markdown($text, $safe=false) {
$parser = new Markdown_Parser;
if ($safe) {
$parser->no_markup = true;
$parser->no_entities = true;
}
return $parser->transform($text);
}
Обратите внимание, что приведенная выше функция создает новый синтаксический анализатор при каждом запуске, а не кэширует его, как предоставленная функция Markdown
(строки 43-56) выполняет эту функцию, поэтому она может быть немного медленной.
Гипотеза редактора разметки JavaScript:
Я создал редактор Markdown в JavaScript, но он имеет расширенные функции. Это заняло много времени и исправлений SVN. Но я не думаю, что будет так сложно изменить редактор Markdown, чтобы ограничить допустимый HTML.
If you're looking to write your own parser, why not use the BBCode architecture.
When submitting your/(user) comments you need to sanitize the text with mysql_escape_real_string(), yes there other functions but this will stop any JS Injections.
Как насчет запуска HTMLspecialChars на введенном пользователе введенный ввод, перед обработкой его посредством Markdown? Это должно избежать чего-либо опасного, но покидают все, что понимает урок.
Я пытаюсь подумать о том случае, когда это не будет работать, но не может думать ни о чем от руки.