从2.0版本开始,如果使用electron的开发人员没有定义Content-Security-Policy,Electron就会在DevTool console发出警告
Electron Security Warning (Insecure Content-Security-Policy) This renderer process has either no Content Security
Policy set or a policy with "unsafe-eval" enabled. This exposes users of
this app to unnecessary security risks.
For more information and help, consult
https://electronjs.org/docs/tutorial/security.
This warning will not show up
once the app is packaged.
在electron文档的安全性一章中,列出了17个应当遵循的规则,第六个就是对CSP的要求:https://www.electronjs.org/docs/tutorial/security#6-define-a-content-security-policy。
内容安全策略(CSP) 是一个确保内容安全的控制方式,应对跨站脚本攻击(XSS),数据嗅探攻击(Sniffing)和数据注入攻击(Data injection)的一层保护措施。
注意,IE8不支持CSP。
Electron建议任何载入到Electron的站点都要开启,以确保应用程序的安全,两种方法可以启用 CSP:
- 1.通过HTTP Header的Content-Security-Policy的字段
Content-Security-Policy: default-src 'self'
- 2.通过HTML的
<meta>
标签
<meta http-equiv="Content-Security-Policy" content="default-src 'self'">
两种方式的规则都是一样的,default-src
代表默认规则,'self'表示限制所有的外部资源,只允许当前域名加载资源。
注意:在electron中很多时候虽然没有所谓的域名,页面内容都是集成在一起的,但也可以设置为'self'
一般情况下,默认规则可以包揽大多数的需求,但凡事都有例外,资源繁多的时候通常需要特殊配置,最值得关心的是script的安全,这至关重要,一旦被注入恶意script,很多安全控制就会荡然无存,可以使用script-src
这一指令设置:
<meta http-equiv="Content-Security-Policy" content="script-src 'self'">
例如我们要引入google-analytics分析流量,可以这样设置:
<meta http-equiv="Content-Security-Policy" content="script-src 'self' https://www.google-analytics.com">
另外,样式安全以及各种内嵌内容,例如frame-src,child-src
有时也需要控制,表单提交也可以单独控制,指令是form-action
,设置多个指令需要用;
隔开:
<meta http-equiv="Content-Security-Policy" content="script-src 'self' https://www.google-analytics.com; style-src 'self' https://animate.style">
所有的指令可以在MDN官网找到
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Content-Security-Policy
如果页面请求的内容都是HTTPS的,可以设置:
<meta http-equiv="Content-Security-Policy" content="block-all-mixed-content">
网友评论