This:
<embed type="text/html" src="https://example.com/" width="100%" height="100%">
转换为以下内容(在页面上呈现时(:
<p> <embed type="text/html" src="https://example.com/" width="100%" height="100%"> </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代码,其中包括将<
转换为<
,并将>
转换为您所看到的>
。进行转换后,markdown
和safe
筛选器都不会将其更改回来。
使用escape
然后safe
没有多大意义,因为safe
只是防止自动转义。
正确的解决方案取决于您page.text
的来源。如果您信任该源,则可以从模板中删除escape
。请注意,这确实为恶意用户或意外滥用(例如跨站点脚本(的安全问题打开了大门。
如果您不信任源,则有两个主要选择:
- 使用
escape
并接受page.text
中包含的任何 HTML 内容都不起作用。 - 跳过
escape
,但在 Markdown 步骤之后通过更精细的清理器运行您的 HTML,类似于 GitHub 所做的。另请参阅在 Python 中允许 Markdown 的最佳实践,同时防止 XSS 攻击?