2

我正在更新一个使用旧版本 misaka 的 Python Django 应用程序,该应用程序将自己描述为“Hoedown 的基于 CFFI 的绑定,一个快速降价处理库”。我的 Django 应用程序中的相关代码如下:

render_flags=(misaka.HTML_SAFELINK)

但是 misaka 2.0 文档不再显示作为渲染标志选项(Django 应用程序因此引发错误):

http://misaka.61924.nl/#html-render-flags

似乎 SAFELINK 已从 hoedown 本身中删除。显然 HTML_SAFELINK 的目的是只允许链接到安全协议。

在我看来,在当前的 misaka 2.0 和 hoedown 渲染标志选项(HTML_SKIP_HTML、HTML_ESCAPE、HTML_HARD_WRAP 和 HTML_USE_XHTML)中没有合适的替代品。

我是否可以安全地假设该标志一开始就毫无意义,并且没有真正的风险将其排除在外?或者在 misaka/hoedown 中是否有另一种方法来阻止指向“不安全”协议的链接?

4

1 回答 1

1

使用 Misaka 2.1.0 中引入的SaferHtmlRenderer类。默认情况下它只允许http:https:链接,但您可以轻松地将其子类化以允许其他协议。来自 Liberapay 的示例:

import re

from markupsafe import Markup
import misaka as m  # http://misaka.61924.nl/


url_re = re.compile(r'^(https?|xmpp):')


class CustomRenderer(m.SaferHtmlRenderer):

    def check_url(self, url, is_image_src=False):
        return bool(url_re.match(url))


renderer = CustomRenderer()
md = m.Markdown(renderer, extensions=(
    'autolink', 'strikethrough', 'no-intra-emphasis', 'tables',
))


def render(markdown):
    return Markup(md(markdown))

于 2017-01-10T10:53:41.133 回答