以下是 通用 安全建议,可能与使用 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 Trust Center 公布其安全与合规立场,包括其维护的框架。
Trust Center 还提供支持性文档,如审计报告、渗透测试报告和已完成的安全态势问卷。这些文档可通过 Trust Center 按需获取。
通过 HSTS 强制实施 HTTPS
Tiny 安全团队强烈建议嵌入 TinyMCE 的客户配置其 Web 服务器,为通过 HTTPS 提供服务的网站添加 HTTP 严格传输安全 (HSTS) 标头。这可以通过更新服务器配置以启用 HSTS 来实现。
HSTS 确保仅使用加密通信,降低降级攻击风险,并增强用户数据保护。虽然集成 HSTS 对 TinyMCE 而言是可选项,但采用这一最佳实践可显著降低使用 TinyMCE 的项目中的漏洞风险。
如果没有 HSTS,访问网站的用户可能易受中间人 (MITM) 攻击。攻击者可利用此漏洞拦截未加密的 HTTP 流量,将用户重定向到恶意网站,或执行降级攻击以强制通过 HTTP 而非 HTTPS 连接。这种缺乏加密的情况会危及敏感用户数据,包括凭据、会话 Cookie 和个人信息。启用 HSTS 后,浏览器将强制所有后续与该网站的交互使用安全的 HTTPS 连接,从而有效降低这些风险。
有关实施 HSTS 的全面指南,请参阅以下资源:
为 TinyMCE 配置内容安全策略 (CSP)
TinyMCE 可与 CSP 标头配合使用。使用 CSP 时,以下指令是 TinyMCE 正常运行必需的:
| 策略指令 | 原因 |
|---|---|
| 脚本有时以带有 src 属性的 script 元素形式加载。 |
| 拼写检查和PowerPaste等某些服务需要XMLHttpRequest。 |
| 编辑器中的图像有时是base64编码的、blob URL,或通过Tiny Cloud服务代理的。 |
| 样式用于内联格式(如下划线、字体颜色等)和用户界面元素的定位。 |
| 字体用于用户界面中的图标,并且是从外部文件加载的。 |
有一种强化的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 Top Ten 2017 — 跨站脚本(XSS)。
注入
注入攻击涉及攻击者使用网站或应用程序输入来运行服务器端代码,如SQL、NoSQL或LDAP脚本。
如果用户输入在服务器端未得到适当清理,则主机设备和用户数据可能会受到损害。
有关与注入相关的安全问题及其如何降低攻击风险的信息,请参阅:OWASP Top Ten 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)。