Electron

【Electron】Electron Security Warning (Insecure Content-Security-Policy)の対処法

更新日:2026/03/27

Electronは、外部サイトを読み込んで何らかの作業をするアプリを手軽に作成できて便利ですね。
しかし、その裏で『Electron Security Warning (Insecure Content-Security-Policy)』という警告が出ていることに気が付きました。

今回は、この警告の対処法についてお伝えします。

 

警告内容

開発ツールに表示される警告は次のようになっています。

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.

訳:Electronセキュリティ警告(安全でないコンテンツセキュリティポリシー)このレンダラープロセスには、コンテンツセキュリティポリシーが設定されていないか、「unsafe-eval」が有効になっているポリシーが設定されています。これにより、このアプリのユーザーは不必要なセキュリティリスクにさらされます。

セキュリティリスクにさらされるなら、早急な対策が必要ですね。

 

対策法

警告内容に次のような文があります。

『レンダラープロセスには、コンテンツセキュリティポリシーが設定されていないか、「unsafe-eval」が有効になっているポリシーが設定されている』

つまり、レンダラーに関するスクリプトに手を加えればよさそうですが…
読み込んだ外部サイト側の問題でした。

つまり、警告は次のように内容を置き換えられます。

外部サイトには、コンテンツセキュリティポリシーが設定されていないか、「unsafe-eval」が有効になっているポリシーが設定されている』

Electron側で外部サイト側のセキュリティの問題を解決することはできませんね...

 

警告を消す方法(非推奨)

外部サイト側のセキュリティの問題を解決できないとしても、開発ツールに警告が出るのを避けたいときは次のコードを追加しましょう。

process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = "true"

これで、警告文が出力されなくなります。

出力されなくなりますが、リスクがなくなるわけではないので安心してはいけません。

 

Electron側の問題点

Electronはレンダー内でNode.jsのモジュールを呼び出すことができます。

例えば外部サイト側のスクリプトに、require('fs')等のコードが含まれていると、ファイル操作が可能になります。

次のようなコードで、PCのコマンドを実行することもできます。

require('child_process').exec('rm -rf /')

怖いですね...

 

外部サイト読み込みの注意点

Electronで外部サイトを読み込むときは、レンダー内でNode.jsを実行できないように設定することが必須です。

new BrowserWindow({ // または new WebContentsView
  webPreferences: {
    nodeIntegration: false,
    contextIsolation: true,
    sandbox: true
  }
})

■プロパティの説明

nodeIntegration:

Node.jsのAPIを有効化するかどうか。
無効化したいので、falseを指定。

contextIsolation:

レンダーとpreloadのスクリプトを異なるコンテキスト(実行環境)で実行するかどうか
preload側はNode.jsを使用するため、trueを指定。

sandbox:

レンダラープロセスをChromiumのサンドボックス内で実行するかどうか。
これにより、Node.jsへのアクセスを完全禁止します。
preloadも一部(fs等)制限されます。

※強制的にnodeIntegration:falseになります。ここでは明示的に指定しています。

イメージ的には、次のようになる...と思う。

┏━ sandbox━━━━━━━┓
┃                        ┃
┃ 【 レンダー       】   ┃
┃         ↓             ┃
┃ ---------------------  ┃
┃ contextIsolationで分離 ┃
┃ ---------------------  ┃
┃         ↓             ┃
┃ 【 preload        】   ┃
┃                        ┃
┗━━━━ ┃ ━━━━━━┛
           ↓
       【 main 】

sandboxを有効にすることでpreloadはOSコマンドやファイルアクセス等の機能が制限されます。
それらの処理はmainプロセスでおこない、preloadはmainとの橋渡しとして設計するのがよさそうです。

更新日:2026/03/27

書いた人(管理人):けーちゃん

スポンサーリンク

記事の内容について

null

こんにちはけーちゃんです。
説明するのって難しいですね。

「なんか言ってることおかしくない?」
たぶん、こんなご意見あると思います。

裏付けを取りながら記事を作成していますが、僕の勘違いだったり、そもそも情報源の内容が間違えていたりで、正確でないことが多いと思います。
そんなときは、ご意見もらえたら嬉しいです。

掲載コードについては事前に動作確認をしていますが、貼り付け後に体裁を整えるなどをした結果動作しないものになっていることがあります。
生暖かい視線でスルーするか、ご指摘ください。

ご意見、ご指摘はこちら。
https://note.affi-sapo-sv.com/info.php

 

このサイトは、リンクフリーです。大歓迎です。