一个以安全为首要目标的Markdown渲染器
项目描述
♜ safe-md
一个以安全为首要目标的Markdown渲染器
建立在GitHub对cmark的分支的强大基础之上,同时添加了额外的安全预防措施,以便安全使用。
在审计从用户输入渲染Markdown的应用程序时,我发现许多流行的Markdown实现都是不安全的,并且在使用标准配置的情况下容易受到XSS攻击。
我坚信安全默认而不是选择性安全。因此,我决定构建一个图书馆,专注于使用最适合工作的工具,同时将它们配置为安全地渲染未经清洗的用户输入。
安装与使用
通过pip安装
任何其他使用PyPI的工具都可以正常工作,我总是建议使用虚拟环境。
$ pip install safemd
渲染标准Markdown
import safemd
safemd.render(content)
渲染GitHub Flavoured Markdown
import safemd
safemd.render(content, flavour="github")
采取的预防措施
用于在官方PyPI仓库应用程序中渲染Markdown的相同库也被safe-md使用。这是基于GitHub经过战斗检验的分支的CommonMark。我们默认启用安全特性CMARK_OPT_SAFE
,因此团队中的任何人都不会意外地让不安全代码通过。作为额外的安全层,safe-md还通过Bleach(Mozilla的HTML清理库)将cmark的输出通过白名单。
通过Travis进行自动安全测试也被利用,即使没有新的更改,也会每天运行一次。
退出安全功能
对于确实有需要的情况,有方法可以退出这些安全预防措施,这样你和你的团队就会很清楚这些地方需要特别小心。
import safemd
# Disable additional whitelist sanitizing through bleach
safemd.render(content, UNSAFE_NO_BLEACH=True)
# Disable cmark safety functions
safemd.render(content, UNSAFE_CMARK_XSS=True)
我的应用程序是否容易受到攻击?
在生产环境中,各种Markdown渲染器容易受到XSS漏洞的攻击,其中一些比其他更普遍。为了方便您测试当前和未来的代码,我们已经列出了一些常见的漏洞。
[Just a link](javascript:alert("hi"))
[Normal link](data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGkiKTwvc2NyaXB0Pgo=)
[Nothing fishy here](data:text/html;base64,PHNjcmlwdCBzcmM9Imh0dHBzOi8vZ2lzdGNkbi5naXRoYWNrLmNvbS9IdWx0bmVyL2JjMDIzOGJkOWIxZDI4M2JhMWM5NDczZjU0M2ZmZjc4L3Jhdy9kM2U5YWFkYTdlMGRlNzFkNmNlYTY1MDVmMTljZGE2NjE1MmE0MDFlL2hpLmpzIiBpbnRlZ3JpdHk9InNoYTM4NC0yaGZ6aFlkelB1SGd0S1E2Vk96UGlNbEN2Nzl3WDM1NzdxTDR3eWpmNWhMYkEvcW1BZHhCbXdxNGl6YXRwRy93IiBjcm9zc29yaWdpbj0iYW5vbnltb3VzIj48L3NjcmlwdD4=)
野外发现的Markdown XSS漏洞
当然,这份文档如果不包含在野外发现的基于Markdown的XSS漏洞列表,就不完整。其中大多数来自2018年和2017年。
- Valve, store.steampowered.com Markdown XSS
- GitLab, Markdown XSS, 内部
- PasteBin, markdown XSS(两次)
- Google Colaboratory, XSS + CSP绕过
- Zendesk, 基于Markdown的存储型XSS
- Streamlabs, 账户被妥协XSS
- Commento
- Leanote
- Markdown的XSS漏洞(以及如何缓解它),showdownjs
- 等等...
发现了什么?
感谢所有建议、改进和错误修复。对于不敏感且不紧急的问题,请随时发送PR或创建GitHub问题。尝试破坏安全性的额外测试特别受赞赏。
我在keybase上进行加密通信。请将邮件发送到hultner.se域名下的安全邮箱。请注意,我丢弃任何SPF、DMARC或DKIM失败的消息,包括SPF-Soft失败。
.
..:
项目详情
下载文件
下载适合您平台的应用程序文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源代码分发
构建分发
safemd-19.10.1.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 0393934fb81a0755a988894f0b0c4bd23a7249fb3722ac1e1dfc6c4513af6aaa |
|
MD5 | 2a566817a0144d55e1f26ef6ff89e44e |
|
BLAKE2b-256 | 529acdecb0184101e6e75befa0ad6fd27397a1425c4796d2a296370aa60c0c2a |
safemd-19.10.1-py3-none-any.whl的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 006ba3f0f9fe8046c3e4a62a06c9d371df4511624195cfd7323cdc0785f8d5c5 |
|
MD5 | 6a575246ee8ab7027396a6d55bec52ef |
|
BLAKE2b-256 | 5d0a3a3381969b39fba7b50bd13834a1a7207951a0712e6360f9fb2ee29fb51d |