【问题标题】:Is python-markdown safe on untrusted input?python-markdown 在不受信任的输入上是否安全?
【发布时间】:2011-12-07 01:23:20
【问题描述】:

Python-Markdown 包括诸如转义原始 HTML 之类的功能,这些功能显然旨在使其在不受信任的输入上安全,一般来说,Markdown 通常用于呈现用户输入,例如在 SO 上。

但是这个实现真的值得信赖吗?这里有没有人研究过它以确定在任意输入上运行是否安全?

我看到有 Markdown in Django XSS safeSecure Python Markdown Library 但是“安全”模式真的安全吗?

【问题讨论】:

  • 你有理由相信它不是吗?如果您正确提供 Django 中的安全模式,它应该可以完美运行,因为它是一个相当成熟的框架并且很多人都在使用它。如果有任何明显的安全风险,人们早就发现了。
  • 它是安全的。但是否“真的安全”取决于你对“真的安全”的定义

标签: python security markdown


【解决方案1】:

据任何人所知,Python Markdown 库似乎是安全的,if you use it properly。安全使用方法见链接,简而言之:重要的是使用最新版本,设置safe_mode,设置enable_attributes=False

更新:safe_mode 现在将被弃用,因为它存在安全问题。见https://github.com/Python-Markdown/markdown/commit/7db56daedf8a6006222f55eeeab748e7789fba89。相反,请使用单独的 HTML 清理程序,例如 HTML Purifier。

【讨论】:

  • @RichardJones,感谢您的更新!我已经更新了我的答案。
  • 该链接现已损坏,但github.com/Python-Markdown/markdown/commit/… 解释了弃用。无论如何,我很高兴我问了!
  • @D.W.我认为这个答案虽然在当时很有帮助,但现在已经过时了。围绕该弃用的讨论似乎是它实际上对不受信任的输入并不安全,您需要使用其他保护。
  • @poolie,你提出了一个很好的观点。这听起来有道理,但我有一个疑问:你知道真正的安全问题是什么吗?我一直无法找到任何有关这方面的信息。如果我能找到这方面的证据,我会用推荐替代 HTML 消毒剂的东西来代替我的答案。
【解决方案2】:

您可以使用bleach

import bleach

text = "<a href='https://example.com'>Example</a><script>alert('message');</script>"

sanitized_text = bleach.clean(text,
            tags=['p','a','code','pre','blockquote'],
            attributes={'code': ['class'],'a': ['href']}
)

阅读documentation了解更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-15
    • 2020-03-31
    • 2016-07-17
    • 1970-01-01
    • 2011-06-14
    • 2018-12-01
    • 1970-01-01
    相关资源
    最近更新 更多