进阶主题 \ 安全有关编辑器安全性的Q&A

此页更新时间:2019-05-04 20:42

此页英文文档:https://www.tiny.cloud/docs/advanced/security/

问:TinyMCE是否能抵御XSS漏洞?

答:TinyMCE默认会过滤掉一些常见的XSS问题,比如js脚本,但毕竟只是前端过滤,而前端的内容是很容易被恶意篡改的,真正的安全防御是在内容提交到服务端后,在服务端对其再次过滤。

问:如何设置TinyMCE的内容安全策略(CSP)?

答:了解该问题前,先要了解CSP是什么。必须注意的是,要想TinyMCE与CSP共同存在,需参考以下指令列表及使用该指令的原因:

简单说明:'self'为与当前页面同源(协议和端口号都必须相同),*.tinymce.com为附加的其它域名,可设置多个,用空格分隔,用分号结尾。
指令 用途
script-src 'self' *.tinymce.com; 允许script的src属性引用脚本的来源。现在脚本就js一种,也就是限制js文件的引用来源。
connect-src 'self' *.tinymce.com; 该选项作用于ajax、websocket、eventsource。如果未包含在名单中,则浏览器返回HTTP 400.
img-src 'self' *.tinymce.com data: blob:; 限制img的src属性。
style-src 'self' 'unsafe-inline'; 限制css文件的引入。这里要说明的是unsafe-inline,意思为允许使用的内联资源,如内联的script元素、javascript: URL、内联的事件处理函数和内联的style元素。
font-src 'self' *.tinymce.com; 限制通过 @font-face加载字体的有效源

以下为通过TinyMCE云服务使用使用TinyMCE时的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; 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并且没有使用需要引用站外资源的插件,可以使用如下写法:

<meta http-equiv="Content-Security-Policy" content="default-src 'none'; script-src 'self'; connect-src 'self'; img-src 'self' data: blob:; style-src 'self' 'unsafe-inline'; font-src 'self';" />

看我看我!

如果你真按上面这么写了,那么你的页面会让你更蛋疼!

请务必详细阅读CSP是什么,以及各个参数的作用,才能正确使用。

按上面的写法,至少所有内联js和站外的图片URL全部完蛋,除非你的编辑器就是内部OA,跟外网没半毛钱关系,js全是引入的文件,没有任何写在html里。 否则,给其加上unsafe-inline 或 干脆设为none 或 在知道域名的情况下将域名加进去。

如果看到这里了,恭喜!再附上一个CSP的中文说明链接

进阶主题内容较为分散,所以不设下一节链接,根据所需在左侧导航中选择需要阅读的内容吧。