SOLFIND
Web Lens
Portal home

プロセスのサンドボックス化 | Electron

https://www.electronjs.org/ja/docs/latest/tutorial/sandbox • 56 KB fetched
Open original page


プロセスのサンドボックス化 | Electron メインコンテンツへ飛ぶ Electron ドキュメント API ブログ ツール * Electron Forge * Electron Fiddle コミュニティ * ガバナンス * 事例紹介 * リソース リリース 日本語 * English * Deutsch * Español * Français * 日本語 * Português * Русский * 中文 検索 * はじめよう * Electron のプロセス * プロセスモデル * コンテキストの分離 * プロセス間通信 * プロセスのサンドボックス化 * Electron での MessagePort * ベストプラクティス * サンプル * 開発 * Native Node Modules * 配布方法 * テストとデバッグ * リファレンス * コントリビューション * * Electron のプロセス * プロセスのサンドボックス化 目次 プロセスのサンドボックス化 Chromium の重要なセキュリティ機能の一つは、プロセスをサンドボックス内で実行できることです。 サンドボックスは、ほとんどのシステムリソースへのアクセスを制限することで悪意のあるコードが引き起こす被害を制限します。サンドボックスのプロセスは、CPU サイクルとメモリのみを自由に使用できます。 サンドボックス化したプロセスで追加の特権を必要とする操作を実行するには、専用の通信チャンネルを使用してより特権のあるプロセスにタスクを委譲します。 Chromium では、メインプロセス以外のほとんどのプロセスにサンドボックス化が適用されます。 これにはレンダラープロセスのほか、オーディオサービス、GPU サービス、ネットワークサービスなどのユーティリティプロセスも含まれます。 詳しい情報は Chromium の サンドボックスデザインのドキュメント をご参照ください。 Electron 20 から、サンドボックスは追加設定なしでレンダラープロセスに対して有効です。 Sandboxing is tied to Node.js integration. Enabling Node.js integration for a renderer process by setting nodeIntegration: true disables the sandbox for the process. プロセスのサンドボックスを無効化する場合は、 単一のプロセスでのサンドボックス無効化 の節をご参照ください。 Electron でのサンドボックスの動作 ​ Electron のサンドボックス化したプロセスは ほぼ Chromium と同じように動作しますが、Electron は Node.js とのインターフェイスであるために更に考慮すべき概念がいくつかあります。 レンダラープロセス ​ When renderer processes in Electron are sandboxed, they behave in the same way as a regular Chromium renderer would. サンドボックス化したレンダラーは Node.js 環境が初期化されません。 そのため、サンドボックスを有効にすると、レンダラープロセスはプロセス間通信 (IPC) を介したメインプロセスへのタスクの委譲によってのみ、特権的なタスク (ファイルシステムとのやりとり、システムへの変更、サブプロセスの生成など) を実行できます。 note For more info on inter-process communication, check out our IPC guide . プリロードスクリプト ​ レンダラープロセスがメインプロセスと通信できるようにするため、サンドボックス化したレンダラーにアタッチされるプリロードスクリプトでは Node.js API をポリフィルしたサブセットを利用できるようになっています。 Node の require に似た require 関数のモジュールを公開してありますが、これは以下 Electron や Node の組み込みモジュールのサブセットしかインポートできません。 * electron (次のレンダラープロセスモジュール: contextBridge , crashReporter , ipcRenderer , nativeImage , webFrame , webUtils ) * events * timers * url node: インポート は以下のものをサポートしています。 * node:events * node:timers * node:url 加えて、プリロードスクリプトは以下の Node.js プリミティブもグローバルとしてポリフィルします。 * Buffer * process * clearImmediate * setImmediate require 関数は機能を限定したポリフィルであるため、 CommonJS モジュール を利用したプリロードスクリプトの複数ファイル分割ができません。 プリロードコードを分割する必要がある場合は、 webpack や Parcel のようなバンドラーを使用してください。 Note that because the environment presented to the preload script is substantially more privileged than that of a sandboxed renderer, it is still possible to leak privileged APIs to untrusted code running in the renderer process unless contextIsolation is enabled. サンドボックスの設定 ​ ほとんどのアプリでは、サンドボックス化が最良の選択です。 サンドボックスと互換性のない特定のユースケース (例えば、レンダラーでネイティブ Node モジュールを使用する場合) であれば、特定のプロセスに対してサンドボックスを無効化できます。 これは信頼できないコードやコンテンツがサンドボックス化されていないプロセスに存在する場合では特に、セキュリティ上のリスクを招きます。 単一のプロセスでサンドボックスを無効化する ​ In Electron, renderer sandboxing can be disabled on a per-process basis with the sandbox: false preference in the BrowserWindow constructor. main.js app . whenReady ( ) . then ( ( ) => { const win = new BrowserWindow ( { webPreferences : { sandbox : false } } ) win . loadURL ( 'https://google.com' ) } ) レンダラーで Node.js インテグレーションが有効の場合は、サンドボックス化も無効です。 This can be done through the BrowserWindow constructor with the nodeIntegration: true flag or by providing the respective HTML boolean attribute for a webview . main.js app . whenReady ( ) . then ( ( ) => { const win = new BrowserWindow ( { webPreferences : { nodeIntegration : true } } ) win . loadURL ( 'https://google.com' ) } ) index.html (Renderer Process) < webview nodeIntegration src = " page.html " > </ webview > アプリ全体でサンドボックスを有効にする ​ If you want to force sandboxing for all renderers, you can also use the app.enableSandbox API. 注意として、この API は app の ready イベントより前に呼ぶ必要があります。 main.js app . enableSandbox ( ) app . whenReady ( ) . then ( ( ) => { // `app.enableSandbox()` が呼び出されたので任意の sandbox:false 呼び出しはオーバーライドされます。 const win = new BrowserWindow ( ) win . loadURL ( 'https://google.com' ) } ) Chromium のサンドボックスを無効にする (テストのみ) ​ You can also disable Chromium's sandbox entirely with the --no-sandbox CLI flag, which will disable the sandbox for all processes (including utility processes). このフラグはテスト目的でのみ使用し、本番環境では 絶対に 使用しないことを強く推奨します。 注意として、この状況で sandbox: true オプションを指定してもレンダラーの Node.js 環境は無効になります。 信頼されないコンテンツの描画に関する注意 ​ 信頼されないコンテンツを Electron で描画することはまだ未知の領域ですが、いくつかのアプリケーションは成功を収めています (例: Beaker Browser )。 私たちの目標はサンドボックス化したコンテンツのセキュリティに関して Chrome にできるだけ近づくことですが、突き詰めるといくつかの基本的な問題のためにいつも後れを取ることになります。 * 私たちには Chromium 製品に適したセキュリティのリソースやノウハウがありません。 今あるものを活かして Chromium からできることはすべて継承し、セキュリティ上の問題にも迅速に対応できるようにしていますが、Electron は Chromium のようにリソースを割くことができず、Chromium のようなセキュリティは確保できません。 * Chrome のセキュリティ機能 (セーフブラウジングや証明書の透過性など) の中には、中央集権化と専用サーバが必要なものがありますが、どちらも Electron プロジェクトの目的に反しています。 そのため、セキュリティ関連のコストが発生しないように、Electron では機能を無効にしています。 * Chromium は 1 つだけですが Electron には何千ものアプリが存在しており、それぞれのアプリの動作は微妙に異なります。 これらの違いを考慮すると巨大な可能性の空間が生じ、通常とは異なるユースケースでのプラットフォームのセキュリティ確保に挑戦することになります。 * セキュリティアップデートをユーザーに直接伝えることができないため、セキュリティアップデートをユーザーに届けるために、アプリベンダーに Electron のバージョンをアップグレードして頂いています。 Chromium のセキュリティ修正を古いバージョンの Electron にバックポートするよう最善の努力をしていますが、すべての修正のバックポートは保証できません。 堅牢性を確保するには、Electron の最新の安定版を使用することが最善の方法です。 このページを編集 前 プロセス間通信 次 Electron での MessagePort * Electron でのサンドボックスの動作 * レンダラープロセス * プリロードスクリプト * サンドボックスの設定 * 単一のプロセスでサンドボックスを無効化する * アプリ全体でサンドボックスを有効にする * Chromium のサンドボックスを無効にする (テストのみ) * 信頼されないコンテンツの描画に関する注意 ドキュメント * 始めましょう * API リファレンス チェックリスト * パフォーマンス * セキュリティ ツール * Electron Forge * Electron Fiddle コミュニティ * ガバナンス * リソース * Discord * Bluesky * X * Mastodon * Stack Overflow その他 * GitHub * Open Collective * Infrastructure Dashboard Copyright OpenJS Foundation and Electron contributors. All rights reserved. The OpenJS Foundation has registered trademarks and uses trademarks. For a list of trademarks of the OpenJS Foundation , please see our Trademark Policy and Trademark List . Trademarks and logos not indicated on the list of OpenJS Foundation trademarks are trademarks™ or registered® trademarks of their respective holders. Use of them does not imply any affiliation with or endorsement by them. The OpenJS Foundation | Terms of Use | Privacy Policy | Bylaws | Code of Conduct | Trademark Policy | Trademark List | Cookie Policy Hosting and infrastructure graciously provided by

Links found on this page

  1. メインコンテンツへ飛ぶ [direct]
  2. Electron [direct]
  3. ドキュメント [direct]
  4. API [direct]
  5. ブログ [direct]
  6. Electron Forge [direct]
  7. Electron Fiddle [direct]
  8. ガバナンス [direct]
  9. 事例紹介 [direct]
  10. リソース [direct]
  11. リリース [direct]
  12. English [direct]
  13. Deutsch [direct]
  14. Español [direct]
  15. Français [direct]
  16. Português [direct]
  17. Русский [direct]
  18. 中文 [direct]
  19. Electron のプロセス [direct]
  20. コンテキストの分離 [direct]
  21. プロセス間通信 [direct]
  22. Electron での MessagePort [direct]
  23. ベストプラクティス [direct]
  24. サンプル [direct]
  25. 開発 [direct]
  26. Native Node Modules [direct]
  27. 配布方法 [direct]
  28. テストとデバッグ [direct]
  29. リファレンス [direct]
  30. コントリビューション [direct]
  31. サンドボックスデザインのドキュメント [direct]
  32. events [direct]
  33. timers [direct]
  34. url [direct]
  35. node: インポート [direct]
  36. Buffer [direct]
  37. process [direct]
  38. CommonJS モジュール [direct]
  39. webpack [direct]
  40. Parcel [direct]
  41. BrowserWindow [direct]
  42. --no-sandbox [direct]
  43. Beaker Browser [direct]
  44. このページを編集 [direct]
  45. セキュリティ [direct]
  46. Discord [direct]
  47. Bluesky [direct]
  48. X [direct]
  49. Mastodon [direct]
  50. Stack Overflow [direct]
  51. GitHub [direct]
  52. Open Collective [direct]
  53. Infrastructure Dashboard [direct]
  54. OpenJS Foundation [direct]
  55. Trademark Policy [direct]
  56. Trademark List [direct]
  57. Terms of Use [direct]
  58. Privacy Policy [direct]
  59. Bylaws [direct]
  60. Code of Conduct [direct]
  61. Cookie Policy [direct]