DEV Community 日本語
フォロー
保存時に暗号化、ただしそれができない場合は除く。ファイル自体がその旨を示す。
Notifio の自動応答機能は、ユーザーの応答を記録して将来の自動応答を作成し、このデータをどこにもアップロードせずにローカルに保存します。この機密データのセキュリティ境界全体は、ユーザーのディスク上のローカルファイルです。Electron の safeStorage は暗号化を提供しますが、すべての Linux 環境で利用できるとは限らないため、正常なフォールバックが必要になります。これを管理するために、Notifio によって書き込まれるすべてのファイルには、「Envelope」構造に「enc」フィールドが含まれており、暗号化されたかプレーンテキストとして保存されたかを明示的に示します。これにより、暗号化されたデータと破損したデータとの間の曖昧さがなくなり、それ以外の場合は両方とも解析の失敗として表示されます。 「writeEnvelope」関数は、利用可能な場合は safeStorage を使用してデータを暗号化します。それ以外の場合は、プレーンテキストの JSON 文字列として保存します。この設計は、Linux マシンでキーリングが実行されていない場合など、暗号化が不可能なシナリオでは、機密性よりも可用性を優先するという意図的な決定を下しています。このような場合、データはユーザーのホームディレクトリ内にプレーンテキストとして保存され、機能が引き続き機能することが保証されます。「readEnvelope」関数は「enc」フィールドを明示的にチェックし、ファイルの形式を推測することを拒否し、暗号化されたデータを復号化できない場合はエラーをスローします。「Envelope」自体には、コンテンツのバージョンとは別にバージョン番号があり、コンテナ形式とコンテンツの形状が独立して変化することを認識しています。「canEncrypt」関数は、Electron 環境外でエラーをスローする代わりに false を返すことで、safeStorage の潜在的な非利用可能性を正常に処理します。このアプローチにより、プラットフォーム API の依存関係なしにモジュールを確実にロードおよびテストできます。重要なのは、読み取りパスはファイルの形式を推測することを明示的に拒否することです。ファイルが暗号化されていると主張しているが safeStorage が利用できない場合、特定の例外がスローされ、暗号文をコンテンツとして解析しようとする試みが防止されます。この明確なエラー報告は、サポートとデバッグに不可欠であり、暗号化の失敗と一般的な破損を区別します。破損したファイルを読み取るとフォールバックが返され、上書きにつながる可能性がありますが、このリスクはデータの特定の性質(たとえば、単一のブール値、または新しいコンテンツが追加されたときにのみ書き込まれる録音)によって軽減されます。設定ファイルと録音ファイルの両方に同じエンベロープ形式が使用されており、暗号化パスが合理化され、永続性の問題が発生した場合のデバッグが簡素化されます。データ構造が進化すると、レガシー目的で引き続きアクセスする必要があるフィールドがマイグレーションでドロップされる場合があります。このような場合、特定の「legacyMessage」関数がメインのマイグレーションをバイパスして古いデータを取得し、フィールドを削除することには完全にコストがないわけではないことを認識します。包括的なルールは、ファイルがどのように書き込まれたかを明示的に示す必要があり、明確なエラー処理を容易にし、特定のコード実行を必要とせずに外部分析を可能にすることです。