Markdown преобразует встроенные / iframe HTML в неиспользуемые HTML - PullRequest
0 голосов
/ 18 июня 2020

Это:

<embed type="text/html" src="https://example.com/" width="100%" height="100%">

преобразуется в это (при отображении на странице):

<p> &lt;embed type="text/html" src="https://example.com/" width="100%" height="100%"&gt; </p>

, делая тег embed непригодным для использования. Есть ли способ предотвратить это? То же самое происходит, когда вы используете тег iframe. Я ожидаю, что страница "example.com" будет отображена.

Я использую Django для проекта, и у меня будет следующее отображение Markdown:

{{ page.text | escape | markdown | safe }}

с page.text переменная, содержащая текст.

Я использую Markdown 3.2.

1 Ответ

0 голосов
/ 19 июня 2020

Я использую Django для проекта, и у вас будет следующее отображение Markdown:

{{ page.text | escape | markdown | safe }}

Предполагая, что page.text содержит <embed>, который вы показываете в своем вопросе , ваша проблема заключается в использовании фильтра escape .

Его задача - избежать кода HTML, который включает преобразование < в &lt; и > в &gt;, как вы видите. После того как это преобразование будет выполнено, ни фильтр markdown, ни фильтр safe не вернут его обратно.

Нет смысла использовать escape, а затем safe, поскольку safe просто предотвращает автоматическое экранирование.

Правильное решение зависит от источника вашего page.text. Если вы доверяете этому источнику, вы можете убрать escape из своего шаблона. Обратите внимание, что этот действительно открывает дверь для проблем безопасности со стороны злонамеренных пользователей или случайного неправильного использования, например, межсайтового скриптинга .

Если вы не доверяйте источнику, у вас есть два основных варианта:

...