Markdown 将 embed/iframe HTML 转换为不可用的 HTML



This:

<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>

使嵌入标记不可用。有什么方法可以阻止这种情况发生吗? 使用 iframe 标记时也会发生同样的情况。我希望呈现页面"example.com"。

我正在为该项目使用 Django,并有以下内容显示 Markdown:

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

page.text是保存文本的变量。

我使用的 Markdown 版本是 3.2。

我正在为该项目使用 Django,并让以下内容显示 Markdown:

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

假设page.text包含您在问题中显示的<embed>,那么您的问题是您使用escape过滤器。

它的工作是转义HTML代码,其中包括将<转换为&lt;,并将>转换为您所看到的&gt;。进行转换后,markdownsafe筛选器都不会将其更改回来。

使用escape然后safe没有多大意义,因为safe只是防止自动转义。

正确的解决方案取决于您page.text的来源。如果您信任该源,则可以从模板中删除escape请注意,这确实为恶意用户或意外滥用(例如跨站点脚本(的安全问题打开了大门。

如果您不信任源,则有两个主要选择:

  • 使用escape并接受page.text中包含的任何 HTML 内容都不起作用。
  • 跳过escape,但在 Markdown 步骤之后通过更精细的清理器运行您的 HTML,类似于 GitHub 所做的。另请参阅在 Python 中允许 Markdown 的最佳实践,同时防止 XSS 攻击?

最新更新