以下是通用的安全建议,可能与使用 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 服务器上配置 HTTP 严格传输安全(HSTS)标头,以用于通过 HTTPS 提供服务的网站。可通过更新服务器配置启用 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服务代理。 |
| 样式用于内联格式(如下划线、字体颜色等)和用户界面元素的定位。 |
| 字体用于UI中的图标,并从外部文件加载。 |
有一种强化的CSP方法,通常称为strict 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开始,这个基本解析器被移除,并用两个更彻底的替代方案取而代之:
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 — 使用已知漏洞的组件。
更多安全信息
有关保护您的网站或应用程序的一般安全建议,请访问 Open Web Application Security Project (OWASP)。