見出し画像

Obsidianプラグイン「Local Vault Server」をリリースしました

Obsidian Local Vault Server Plugin は、Obsidian に保管しているファイルをローカル環境でホスティングするためのプラグインです。Obsidian の Vault 内にあるファイルをローカルサーバー経由で参照・配信できるようにしつつ、さまざまなセキュリティ対策を講じることで、不用意な情報漏洩や不正アクセスを防ぐことを目指しています。しかし、自身はセキュリティのスペシャリストではないため、公開するものは流出して良いものに留めておくのをおすすめします。

現在はHTTP接続およびBearer認証を使用しています。外部に公開する場合、セキュリティリスクがあるため、HTTPS接続が実装されるまでは使用しないことを強く推奨します。


主な特徴

1. ローカルサーバー機能

  • 127.0.0.1(もしくは localhost)でHTTPサーバーを起動し、ブラウザや他のアプリケーションからファイルを参照できるようにします。

  • デフォルトで外部には公開されないため、ローカルマシン上のみで安全に動作させられます。

2. ホワイトリストによるアクセス制御

  • ホワイトリスト機能を有効にすると、指定フォルダ内のファイルのうち、ユーザーが許可したものだけがアクセス可能となります。

  • 不特定のファイルを外部に公開するリスクを減らし、大切な情報を誤って配布してしまうことを防ぎます。

3. 認証トークンによる保護

  • 認証トークンを設定することで、HTTPリクエストに「`Authorization: Bearer <token>`」ヘッダーが含まれていない場合はアクセスが拒否される仕組みがあります。

  • ローカル環境であっても、他のユーザーやプログラムからの不正なアクセスをブロックできます。

4. ディレクトリトラバーサル対策

  • リクエストされたファイルパスを正規化・実体パス解決(シンボリックリンクなどを考慮)し、Vault の指定ディレクトリ外へのアクセスを防止します。

  • これにより、`../` を含む不正なパス指定によるディレクトリトラバーサル攻撃を抑制できます。

5. CORS の制限

  • CORS ヘッダーを設定し、基本的に同一ホスト・ポートからのみリクエストが行われる想定です。

  • 不要なクロスサイトアクセスを防ぎ、セキュリティを高める一助となります。


どのような配慮をしているか

  1. 限定公開の徹底

    • ホスト名の初期値を `127.0.0.1` にしており、外部ネットワークへの公開を意図的に困難にしています。

    • これにより、自分のPCだけで使う分には認証トークンなしでも比較的安全に運用できます。

  2. 運用時のヒューマンエラー防止

    • 設定画面でホワイトリスト機能を提供し、ユーザーが「どのファイルを公開するか」を明示的に選択できます。

    • また、設定値を変えたら即座にそれが反映されるようになっているため、誤設定を早期に発見しやすくなっています。

  3. 認証トークン

    • 認証トークンを指定しない場合、誰でもファイルへアクセスできるようになります。

    • それでもローカルマシン上だけで使うケースが多いため、強制ではなくオプションとして柔軟に運用可能です。

  4. ディレクトリトラバーサル対策

    • `path.normalize` や `fs.realpath` を使って実体パスを取得し、設定したフォルダーより外にあるファイルへのアクセスを拒否する設計を採っています。

    • シンボリックリンクなどで意図しない場所へのアクセスが発生しないよう、複数のセキュリティチェックを実装しています。

  5. Vault 内のプライバシー保護

    • Obsidian の Vault は個人のメモやドキュメントが多数含まれるため、不必要なファイルが外部から参照されることのないよう配慮しています。

    • ホワイトリスト以外は一切アクセスが許可されない設定にもできるので、プライバシーや機密性を高められます。


どのような使い道を想定しているか

現在はHTTP接続およびBearer認証を使用しています。外部に公開する場合、セキュリティリスクがあるため、HTTPS接続が実装されるまでは使用しないことを強く推奨します。

  1. Markdown ファイルのプレビューや共有

    • ローカルサーバーとして起動することで、自作のスクリプトやブラウザのプレビュー機能を使い、Obsidian で書いた Markdown ファイルを別の形で表示・確認したい場合に役立ちます。

    • 一部のファイルだけホワイトリストで許可すれば、必要なものだけ外部に見せたり、リンクを貼ったりもできます(ただし、外部からアクセスするにはさらにネットワーク設定が必要)。

  2. 同一マシンで動作するアプリケーションとの連携

    • 例えば、ローカルで動いている Web アプリケーションやツールが、Obsidian の Vault 内のファイルを読み込みたい場合に利用できます。

    • 認証トークンを設定しておけば、特定のアプリケーションだけがトークンを知っていて安全にアクセスする、という運用が可能です。

  3. メモや画像などの軽量配信

    • 他のユーザーと同じPCを利用している状況や、リモート接続した自分の端末でちょっとファイルを確認・受け渡ししたい時などにサッと立てて使う、簡易ファイルサーバーとしても利用できます。

  4. プラグイン開発・デバッグ用

    • Obsidian 向けのプラグインを開発する際に、テストデータやリソース(画像、テキスト)をローカルから取得するケースがあります。

    • このプラグインを使えば、単純なローカルパスアクセスではなく、HTTP経由でテストできるので、ネットワーク関連の機能開発・検証に便利です。

  5. CSSによるローカル背景画像に使用(おすすめ)

Windows、Linux、macOS 上の Obsidian デスクトップ 1.2.8 より前のバージョンでは、パス処理が不適切であるため、細工された Web ページがローカル ファイルにアクセスし、「app://local/<absolute-path>」経由でリモート Web サーバーにファイルを流出させる可能性があります。この脆弱性は、ユーザーが Obsidian で悪意のあるマークダウン ファイルを開いたり、悪意のある Web ページからテキストをコピーして Obsidian に貼り付けたりした場合に悪用される可能性があります。

  • 上記の問題によりローカルの画像を参照出来ない為、ローカルサーバーで参照できるようにした。


まとめ

Obsidian Local Vault Server Plugin は、Vault 内のファイルをローカルサーバーとして公開しつつも、認証トークンやホワイトリストなどのセキュリティ機能を備え、配慮された設計となっています。特に以下の点を重視して使うとよいでしょう。

  • ローカル環境だけでの利用:ホストを 127.0.0.1 に固定し、基本的には外部に公開しない。

  • 必要に応じた認証トークン:マシンを複数人で使う、または外部公開リスクがあるなら必ず設定する。

  • ホワイトリストによる厳格な制御:特定のファイルだけを公開したい場合や、さらに強固な管理が必要な時に有効

問題を発見した場合は報告してもらえると助かります。


いいなと思ったら応援しよう!