进阶主题 \ 安全有关编辑器安全性的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的中文说明链接。
进阶主题内容较为分散,所以不设下一节链接,根据所需在左侧导航中选择需要阅读的内容吧。