跳转到主要内容

一个以安全为首要目标的Markdown渲染器

项目描述

safemd Twitter Follow Add Hultnér on LinkedIn Build Status PyPI - Status Codacy Badge Codacy Badge PyPI Code style: black

♜ 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年。

发现了什么?

感谢所有建议、改进和错误修复。对于不敏感且不紧急的问题,请随时发送PR或创建GitHub问题。尝试破坏安全性的额外测试特别受赞赏。

我在keybase上进行加密通信。请将邮件发送到hultner.se域名下的安全邮箱。请注意,我丢弃任何SPF、DMARC或DKIM失败的消息,包括SPF-Soft失败。


 .
..:

项目详情


下载文件

下载适合您平台的应用程序文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

safemd-19.10.1.tar.gz (6.6 kB 查看哈希值)

上传时间 源代码

构建分发

safemd-19.10.1-py3-none-any.whl (8.9 kB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面