Electron建议开发者定义定义内容安全策略

从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.greatytc.com">

另外,样式安全以及各种内嵌内容,例如frame-src,child-src有时也需要控制,表单提交也可以单独控制,指令是form-action,设置多个指令需要用;隔开:

<meta http-equiv="Content-Security-Policy" content="script-src 'self' https://www.greatytc.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">
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。