以下是适用于使用 TinyMCE 的网站或应用程序的一般安全建议。
概述
报告 TinyMCE 安全问题
-
我们如何维护 TinyMCE 的安全性
脚本与 XSS 漏洞
保持依赖项更新
安全保证与合规性
通过 HSTS 强制实施 HTTPS
为 TinyMCE 配置内容安全策略 (CSP)
-
用户输入元素的一般安全风险
跨站脚本 (XSS)
注入攻击
清理 HTML 输入以防范 XSS 攻击
保护嵌入的外部资源
数据传输与存储不安全
身份认证与会话管理失效
使用含已知漏洞的组件
更多安全信息
报告 TinyMCE 安全问题
Tiny 重视安全研究人员在全球技术产品安全改进方面的工作。我们欢迎希望以负责任的方式披露我们产品或系统中漏洞的研究人员。
请注意,我们不提供任何“漏洞赏金”计划或对披露的漏洞提供任何形式的报酬。
如需报告潜在的安全漏洞,请通过 infosec@tiny.cloud 联系我们的安全团队。
根据美国国家基础设施咨询委员会 (NIAC) 《漏洞披露框架》(PDF 链接),Tiny 请求社区成员在 Tiny 完成调查并采取行动修复之前,对其报告及发现保持保密。
Tiny 将就您报告的状态与您沟通,并在问题修复和披露后,经您许可,公开将该安全问题的发现归功于您。
我们如何维护 TinyMCE 的安全性
为保护 TinyMCE 用户,Tiny:
修补跨站脚本 (XSS) 漏洞,
保持 TinyMCE 依赖项更新,并
提供关于通过 HSTS 强制实施 HTTPS 的建议,并
提供关于如何配置适用于 TinyMCE 的内容安全策略的信息。
脚本与 XSS 漏洞
TinyMCE 会从编辑器内容中过滤脚本等内容,但客户端应用可能被攻击者绕过。Tiny 建议通过服务器端过滤器处理接收到的编辑器内容。
TinyMCE 不支持 SVG(可缩放矢量图形),以保护我们的用户及其终端用户。SVG 可用于执行客户端和服务器端攻击。
自 2020 年 1 月 1 日起,已修补的 XSS 漏洞的安全公告将发布在 TinyMCE GitHub 仓库安全页面。
保持依赖项更新
为保护用户,Tiny 确保 TinyMCE 依赖项在下一个版本(主版本或次版本)发布前更新。
安全保证与合规性
Tiny 在 Tiny 信任中心发布其安全与合规态势,包括其维护的框架。
信任中心还提供支持性文档,如审计报告、渗透测试报告和已完成的安全态势问卷。这些文档可通过信任中心按需获取。
通过 HSTS 强制实施 HTTPS
Tiny 安全团队强烈建议嵌入 TinyMCE 的客户配置其 Web 服务器,为通过 HTTPS 提供服务的网站包含 HTTP 严格传输安全 (HSTS) 头。这可通过更新服务器配置以启用 HSTS 来实现。
HSTS 确保仅使用加密通信,缓解降级攻击,并增强用户数据保护。虽然对 TinyMCE 集成 HSTS 是可选的,但采用此最佳实践可显著降低使用 TinyMCE 的项目中漏洞的风险。
若未启用 HSTS,访问网站的用户可能易受中间人 (MITM) 攻击。攻击者可通过拦截未加密的 HTTP 流量、将用户重定向到恶意网站或执行降级攻击以强制通过 HTTP 而非 HTTPS 连接来利用此漏洞。这种缺乏加密的情况会危及敏感用户数据,包括凭据、会话 cookie 和个人信息。通过启用 HSTS,这些风险可得到有效缓解,因为浏览器会强制后续与该站点的所有交互使用安全的 HTTPS 连接。
有关实施 HSTS 的全面指导,请参阅以下资源:
为 TinyMCE 配置内容安全策略 (CSP)
TinyMCE 可与 CSP 头配合使用。使用 CSP 时,以下指令对于 TinyMCE 正常运行是必需的:
| 策略指令 | 原因 |
|---|---|
| 脚本有时会作为带有 src 属性的脚本元素加载。 |
| 拼写检查和 PowerPaste 等某些服务需要 XMLHttpRequest。 |
| 编辑器中的图像有时是 base64 编码的、blob URL 或通过 Tiny Cloud 服务代理的。 |
| 样式用于内联格式(如下划线、字体颜色等)和用户界面元素的定位。 |
| 字体用于 UI 中的图标,并从外部文件加载。 |
有一种强化的 CSP 方法,通常称为 严格 CSP。严格的 CSP:
对所有
<script>元素使用nonce;在每次页面加载时重新生成每个
nonce;重构内联事件处理程序,使它们从 JavaScript 块中添加;并且
不允许在任何指令中使用
unsafe-inline值。然而,TinyMCE 目前需要在
style-src指令中使用unsafe-inline值来呈现非纯文本内容。因此,目前不支持在严格 CSP 配置中运行 TinyMCE。
此外,上述所需的指令会阻止从外部来源加载任何内容。要允许来自特定来源的内容,请将来源域添加到相关指令中。例如,要允许 YouTube 视频:
media-src 'self' *.youtube.com;要允许来自任何来源的内容,请使用 (*) 通配符。允许所有来源(使用 *)会取消该来源类型的安全策略。例如:
media-src *;有关内容安全策略的信息,请参阅:MDN Web 文档 - 内容安全策略 (CSP)。
使用 Tiny Cloud 时,请使用此 CSP 头:
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'self' *.tinymce.com *.tiny.cloud; connect-src 'self' *.tinymce.com *.tiny.cloud blob:; img-src 'self' *.tinymce.com *.tiny.cloud data: blob:; style-src 'self' 'unsafe-inline' *.tinymce.com *.tiny.cloud; font-src 'self' *.tinymce.com *.tiny.cloud;" >
从本地域自托管 TinyMCE 时,请使用此 CSP 头(不包括 *.tiny.cloud 域):
<meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'self'; connect-src 'self' blob:; img-src 'self' data: blob:; style-src 'self' 'unsafe-inline'; font-src 'self';" >
用户输入元素的一般安全风险
以下安全风险并非 TinyMCE 特有,而是与允许用户输入的网站或应用程序相关的主要安全风险。保护您的服务和用户免受这些风险需要服务器端处理。请注意,攻击者很可能会绕过任何编辑器并直接攻击服务器,而不是使用文本编辑器作为攻击媒介。
有关缓解这些风险的信息,请参阅每个部分中提供的链接。
跨站脚本攻击 (XSS)
跨站脚本攻击 (XSS) 涉及使用网站或应用程序输入来注入恶意的客户端代码。然后,此代码可用于攻击您的用户。
尽管 TinyMCE 会过滤编辑器内容中的脚本等内容,但应采取预防措施来保护您的用户,例如启用内容安全策略 (CSP) 和服务器端过滤。
有关跨站脚本攻击以及如何降低攻击风险的信息,请参阅:OWASP 2017 十大安全风险 — 跨站脚本攻击 (XSS)。
注入攻击
注入攻击涉及攻击者使用网站或应用程序输入来运行服务器端代码,例如 SQL、NoSQL 或 LDAP 脚本。
如果用户输入在服务器端未正确进行清理,主机设备和用户数据可能会受到损害。
有关与注入相关的安全问题以及如何降低攻击风险的信息,请参阅:OWASP 2017 十大安全风险 — 注入攻击。
清理 HTML 输入以防止 XSS 攻击
以前,在将 HTML 内容传递给 TinyMCE 5.x 之前,它使用一个内部开发的 API,SaxParser 进行解析。
当时没有其他替代方案,因此开发了 SaxParser API。
当此 API 的 validate 设置启用时 — validate: true — SaxParser 会删除不符合声明的架构的元素和属性。
而且,在其生命周期中,SaxParser 得到了扩展。例如,从 TinyMCE 5.9 开始,SaxParser API 将具有特定名称或 ID 的属性标记为不安全,因为某些名称或 ID 可能会导致主机浏览器覆盖现有属性或函数。
从 TinyMCE 6.0 开始,这个基本解析器被移除,并被两个更全面的替代方案所取代:
原生浏览器 API,DOMParser();并且
开源免费的 针对 HTML、MathML 和 SVG 的 XSS 过滤器,DOMPurify。
TinyMCE 使用 DOMPurify 3.x,这是 TinyMCE 8 开发时的当前版本。
在 HTML(或 XML)内容传递给 TinyMCE 8 之前,DOMParser API 会将 HTML(或 XML)字符串解析为 DOM 对象。在此过程中,DOMParser 会尝试修正格式错误的 HTML。
例如,以下字符串:
<p> <a href="https://example.com">Click here. </p>
当传递此字符串时,DOMParser API 会添加缺失的锚点闭合标签:
<p> <a href="https://example.com">Click here.</a> </p>
接下来,这个现在格式正确的 DOM 对象会传递给 DOMPurify。
DOMPurify 会对 DOM 对象应用以安全为重点的规则集,以过滤 HTML 并保护 TinyMCE 以及使用 TinyMCE 的应用程序免受 XSS 攻击。
关闭 DOMPurify
DOMPurify 过滤功能默认开启,并且在 TinyMCE 6.4 之前无法关闭。
但从 TinyMCE 6.4 开始,可以使用 xss_sanitization 选项关闭 DOMPurify。
xss_sanitization默认设置为true。也就是说,即使 TinyMCE 配置中未声明此选项,TinyMCE 也会专门将xss_sanitization选项设置为true。
类型: Boolean
默认值: true
可能的值: true,false
示例:使用 xss_sanitization 关闭 DOMPurify,不再对 HTML 进行 XSS 攻击过滤
tinymce.init({
selector: 'textarea', // 根据 HTML 更改此值
xss_sanitization: false
});关闭 DomPurify 会使 TinyMCE 以及任何使用 TinyMCE 的应用程序极易受到 XSS 攻击。只有在具备替代且具备同等能力的 HTML 和 XML 过滤以及 XSS 保护措施时,才能关闭 DomPurify。
TinyMCE 8.0.1 将 DOMPurify 升级到 3.2.6 版本,并默认启用
SAFE_FOR_XML标志。这会强制执行更严格的过滤,可能会移除或更改之前在 TinyMCE 7 中通过的内容。有关更多信息,请参阅 迁移指南
保护嵌入的外部资源
sandbox_iframes
此选项可以控制在插入到编辑器时,是否对 <iframe> 元素进行 沙盒处理。启用时,所有 <iframe> 元素都会被赋予 sandbox="" 属性,应用所有限制。
类型: Boolean
默认值: true
可能的值: true,false
示例:使用 sandbox_iframes 选项
tinymce.init({
selector: 'textarea', // 根据 html 更改此值
sandbox_iframes: false
});convert_unsafe_embeds 选项
此选项控制 <object> 和 <embed> 元素是否将转换为限制更严格的替代元素,即对于图像 MIME 类型转换为 <img>,对于视频 MIME 类型转换为 <video>,对于音频 MIME 类型转换为 <audio>,对于其他或未指定的 MIME 类型转换为 <iframe>。
转换为 <img>、<video> 或 <audio> 时,可防止嵌入资源执行潜在恶意操作,包括脚本编写、文件下载、浏览器弹窗、绕过同源策略等。此外,还需启用 sandbox_iframes 选项以确保 <iframe> 转换也被中和。
类型: Boolean
默认值: true
可能的值: true,false
示例:使用 convert_unsafe_embeds 选项
tinymce.init({
selector: 'textarea', // 根据 html 更改此值
convert_unsafe_embeds: false
});allow_html_in_comments
allow_html_in_comments 选项允许在编辑器内容的注释中保留类 HTML 内容。默认情况下,作为安全措施,TinyMCE 会移除包含类 HTML 内容的注释。
类型: Boolean
默认值: false
可能的值: true,false
将此选项设置为 true 可能会使应用程序面临 XSS 漏洞风险。DOMPurify 维护者已指出,在注释中允许类 HTML 内容可能存在安全风险。仅在信任内容源并了解安全影响的情况下才启用此选项。示例:使用 allow_html_in_comments
以下示例演示了默认情况下(移除)包含 HTML 的注释的处理方式,以及如何配置 TinyMCE 以保留这些注释:
tinymce.init({
selector: 'textarea',
allow_html_in_comments: true, // 在注释中启用 HTML
});数据传输和存储不安全
没有强加密保护的数据传输或存储会让此内容暴露给攻击者。
将不安全的内容加载到编辑器中,或者通过不安全的连接从编辑器提交内容,会使用户和主机服务器面临攻击风险。
有关敏感数据泄露问题以及如何降低攻击风险的信息,请参阅:OWASP Top Ten 2017 — 敏感数据泄露。
身份验证与会话管理失效
身份验证与会话管理失效或实现不当会使用户数据和服务器暴露给攻击者,使他们能够冒充用户,包括管理员。
身份验证失效或会话管理失效可能允许攻击者以被攻陷的用户账户身份,通过编辑器或任何输入字段更改或提交数据。
有关身份验证失效问题以及如何降低攻击风险的信息,请参阅:OWASP Top Ten 2017 — 身份验证失效。
使用已知存在漏洞的组件
在您的网站或应用程序中使用过时的组件会让攻击者利用已知漏洞。
一旦发现漏洞,TinyMCE 会进行修补。保持 TinyMCE 和其他依赖项的更新,将保护您和您的用户免受已知漏洞的攻击。
有关使用已知存在问题的组件以及如何降低攻击风险的信息,请参阅:OWASP Top Ten 2017 — 使用已知存在漏洞的组件。
更多安全信息
有关保护您的网站或应用程序的一般安全建议,请访问 开放 Web 应用程序安全项目 (OWASP)。