我需要让用户将 Markdown 内容输入到我的 Web 应用程序中,该应用程序具有 Python 后端。我不想不必要地限制他们的条目(例如不允许anyHTML,这违背了 Markdown 的精神和规范),但显然我需要防止跨站脚本(XSS)攻击。
我不可能是第一个遇到这个问题的人,但没有看到任何包含所有关键字“python”、“Markdown”和“XSS”的问题,所以这里是。
使用 Python 库处理 Markdown 和防止 XSS 攻击的最佳实践方法是什么? (支持奖励积分PHP Markdown 额外 http://michelf.com/projects/php-markdown/extra/句法。)
我无法确定“最佳实践”,但通常在接受 Markdown 输入时有三种选择:
允许在 Markdown 内容中使用 HTML(这是 Markdown 最初/官方的工作方式,但如果处理不当,这可能会引发 XSS 攻击)。
只需将任何 HTML 视为纯文本,本质上是让您的 Markdown 处理器转义用户的输入。因此<small>…</small>
输入中不会创建小文本,而是创建文字文本“<small>…</small>
”.
丢弃 Markdown 中的所有 HTML 标签。这对用户来说非常不利,并且可能会因为诸如<3
取决于实施。这是 Stack Overflow 上采用的方法。
我的问题具体涉及案例#1。
鉴于,什么对我有用正在通过发送用户输入
-
Python 的 Markdown https://pythonhosted.org/Markdown/,其中可选支持额外语法 https://pythonhosted.org/Markdown/extensions/extra.html然后通过
-
html5lib https://github.com/html5lib的消毒剂.
我对这个组合进行了一系列 XSS 攻击尝试,但都失败了(万岁!);但使用像这样的良性标签<strong>
工作完美。
这样,您实际上可以使用选项 #1(根据需要),但潜在危险或格式错误的 HTML 片段除外,这些片段将按选项 #2 进行处理。
(感谢 Y.H Wong 为我指明了 Markdown 库的方向!)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)