首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >清除用户创建的带有代码的标记

清除用户创建的带有代码的标记
EN

Stack Overflow用户
提问于 2014-01-11 02:57:50
回答 1查看 916关注 0票数 0

我在清理用户输入和正确显示代码时遇到了问题。

使用bleach清理用户数据,它将

代码语言:javascript
运行
复制
< ```a < b```

代码语言:javascript
运行
复制
&lt; ```a &lt; b```

然后markdown将markdown文本转换为HTML

代码语言:javascript
运行
复制
markdown.markdown(u'&lt;\n ```a &lt; b```')

输出结果是

代码语言:javascript
运行
复制
<p>&lt;\n <code>a &amp;lt; b</code></p>

我知道发生这种情况是因为第一个<被认为是HTML,但代码块中的所有内容都被转义,因为您希望显示它,而不是解释它。

有什么建议或者其他专门清理markdown的库吗?

EN

回答 1

Stack Overflow用户

发布于 2014-01-11 11:34:11

漂白剂是HTML消毒剂,而不是降价消毒剂。如果你想清理网站上来自不受信任用户的输入,这是可以理解的。但是,您通常会对markdown的输出(即HTML)运行bleach,而不是对markdown文本本身运行bleach。

代码语言:javascript
运行
复制
sanitized_html = bleach.clean(markdown.markdown(some_text))

接下来,将示例markdown文本传递给Python-Markdown。你会得到完全可以接受的结果。事实上,您的输出(首先使用漂白剂)实际上是不正确的。注意,代码现在包含&amp;lt;,它将在浏览器中显示为&lt;而不是<。您真正想要的输出是:

代码语言:javascript
运行
复制
<p>&lt; <code>a &lt; b</code></p>

这正是Python-Markdown为您提供的开箱即用的功能。Python-Markdown的dingus显示给定输入的HTML源和预览。你可能想用它来理解我的意思。

如果你担心用户提交不好的markdown会破坏事情,你可能会很高兴知道Python-Markdown声明的goals之一是适合“在web服务器环境中使用的(从不引发异常,从不写入stdout等)”。换句话说,错误的用户输入不应该使您的服务器崩溃。当然,他们可以注入恶意的html/javascript,但这就是Bleach在markdown从用户输入构建html之后的用途。

最后一点评论。是的,我知道Python-Markdown有一个"safe_mode“。然而,这是一个不幸的命名功能。一个更贴切的名字可能是"strip_html“或"escape_html”(这两个名字都可以)。作为Python-Markdown的主要开发者,我推荐Bleach来清理来自不受信任用户的输入。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21052233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档