監査状況と利用上の注意
第三者によるセキュリティー監査・ペネトレーションテストは未実施です。この資料は安全性の認証・保証ではありません。ソースと配信設定に基づく設計情報であり、実際のレスポンスヘッダー、通信、端末での挙動は要検証です。
本資料は develop ブランチの変更を対象とします。公開中の本番版と内容が異なる場合があります。許可のない侵入試験、負荷試験、第三者データの取得は行わないでください。
1. 対象・構成・信頼境界
| 要素 | 実装・確認事項 |
|---|---|
| 配信 | Netlify 上の HTML・JavaScript・CSS と、AI・標高などに使うサーバー関数。HTTPS の本番配信は公開前に確認します。 |
| アプリ | インストール可能な PWA。Service Worker sw.js がアプリシェルをキャッシュ。 |
| 保存 | 安否・危険メモ・帰宅計画・画面設定などは localStorage、地域地図・GPX 経路は IndexedDB。ブラウザ内保存であり暗号化なし。 |
| 外部サービス | Google マップ等の外部地図・公的情報へのリンク、国土地理院の地名検索、地図関連配信元。実際の通信先・パラメーターはブラウザのネットワークログで棚卸しすること。 |
| 権限 | GPS は利用者操作で取得。共有は端末の共有機能またはクリップボード。外部への自動救助通報や記録同期は行わない設計。 |
| 認証 | 一般利用者のアカウントは設けていません。防災ナビAIは設定により、共用または本人用の接続コードで利用できます。端末を共用する際は保存した情報に注意してください。 |
利用者ごとの独立利用・情報共有について
同じ防災ナビのURLを複数人が利用しても、基本的に各利用者がそれぞれ独立して使えます。 AI会話履歴・AIの振る舞い設定・家族の安否記録・徒歩帰宅班の記録などは、利用している端末のブラウザー内に保存されます。ほかの利用者の端末へ自動的に共有・同期される仕組みはありません。
利用者のアカウントやクラウド同期機能は設けていません。したがって、同じURLを別のスマホやブラウザーで開いても、通常は以前の記録は引き継がれません。ブラウザーのデータ削除や端末の故障・交換で記録を失う可能性があります。
注意:同じ端末・同じブラウザープロファイルを複数人で使用すると、そのブラウザーに保存された記録が見える場合があります。ブラウザー内の保存データは暗号化されていません。端末のロックを利用し、共用端末では個人情報の入力を避けてください。
AI会話や安否情報などは、利用者が共有・コピー操作を行った場合に限り、選択した外部アプリなどへ渡せます。共有操作をしなくても、AIへの質問内容は回答生成のためサーバーおよび外部AIサービスへ送信されます。「他の利用者と共有されない」ことと「外部に一切送信されない」ことは異なります。
家族・職場のメンバー間で安否情報をリアルタイム同期する機能は、現時点ではありません。複数端末でのデータ分離は設計とコード上の確認であり、第三者によるセキュリティー監査で保証されたものではありません。
AI検索の送信先と会話履歴
個人情報や機密情報は入力・添付しないでください。 氏名、住所、連絡先、会社の内部資料などが、写真やPDFにも入っていないか送信前に確認してください。
防災ナビAIは Cloudflare Workers AI を通じて、中国のAlibabaが開発した Qwen 3.8 27B を利用します。文字と画像を扱える無料枠があり、CloudflareはWorkers AIで処理した顧客コンテンツをモデルの学習に使わないと説明しています。処理が行われる国・地域は当アプリで確認できていません。
GoogleのGemini API無料枠は、個人情報・機密情報等を送信しないよう規約に定め、送信内容を製品の改善等に利用すると説明しています。写真や資料を扱う標準機能には、Cloudflareを選びました。AI設定で利用者が別のAIサービスを開く場合は、そのサービスの利用条件が適用されます。
検索時に質問、選んだ画像またはファイルから読み取った内容を送ります。続けて質問すると、直近のやり取りを送ります。添付内容は最初の回答を得た後に破棄し、次の質問へ自動で再送信しない設計です。PDFはブラウザーで読み取り、送る範囲を画面に表示します。
チャットの「ウェブ ON」で、検索に必要な現在の質問を外部検索サービスへ送ります。会話履歴、添付、GPS座標はウェブ検索には渡しません。現在地は明示的にONにしたときに取得し、周辺の地図検索に使います。AIには施設候補と直線距離を渡します。
帰宅中の相談では、現在地をONにしている場合、丸めた座標を国土地理院の地名検索に送ります。ウェブや公開SNSの検索には、得られた地名と「通行止め」などの検索語を使います。おすすめの使い方相談では、端末のルート・地図の保存状況を端末内で確認します。
会話の質問と回答は、使っているブラウザー内に暗号化せず保存します。履歴はAIのタブから削除できます。元の添付ファイルと読み取りデータは履歴に保存しません。回答に引用された内容は履歴に残ります。
2. 現在の防御策と制約
| 項目 | 現状 | 監査ポイント |
|---|---|---|
| セキュリティーヘッダー | _headers に X-Content-Type-Options、X-Frame-Options、Referrer-Policy、Permissions-Policy、COOP、HSTS を記載 | 本番の HTTP レスポンスに反映されているか確認 |
| CSP | frame-ancestors、base-uri、object-src、form-action 等の部分的制限のみ | script-src を強制できていない。インラインスクリプトとイベント属性の移行が必要 |
| 入力表示 | 主な動的 UI は textContent / DOM API を利用。現地記録の一部は HTML 文字列にエスケープして挿入 | DOM XSS、属性エスケープ、外部データ・保存データの汚染を検査 |
| 個人情報 | ローカル保存。共有は明示操作。安否記録の共有時は確認ダイアログあり | 保存データは暗号化されない。端末紛失・共用端末・XSS を評価 |
| Service Worker | 同一オリジンのアプリシェルをキャッシュ。版番号を更新して切替 | 古い画面の残留、キャッシュ更新失敗、オフライン時の信頼性、キャッシュ改ざん・配信侵害時の影響 |
| 地名検索 | 外部 API から候補を取得し、利用者が推定地点を選択 | API の可用性・CORS・入力の漏えい・レスポンス検証・誤認位置の表示 |
| 依存関係 | 地図データ生成用に Node.js パッケージを使用。ブラウザ側は外部地図関連の依存・配信を確認要 | SBOM、依存バージョン、ライセンス、脆弱性スキャン、サプライチェーン |
3. 優先リスク(監査前の暫定評価)
- 高優先:スクリプト実行制限が不十分な状態で、個人情報を localStorage に保持する。XSS 発生時の情報漏えい影響が大きい。
- 高優先:公開前に CSP 強化と入力経路の DOM XSS 検査が必要。
- 中優先:共有操作で氏名・居場所・連絡内容を外部アプリへ渡す際のプレビューと誤送信対策。
- 中優先:地図・施設データの鮮度、更新失敗時の表示、推定地点と確認済み地点の区別。
- 中優先:Service Worker の更新・オフライン復帰・ブラウザデータ削除時の動作。
上記は確定した脆弱性の診断結果ではなく、実装状況から抽出した検証対象です。CVSS スコアや「安全」判定は付与していません。
4. 第三者監査チェックリスト
- 配信レスポンスの TLS・HSTS・CSP・CORS・セキュリティーヘッダー確認
- 入力・localStorage・JSON・GPX・外部 API レスポンスからの DOM XSS / HTML インジェクション検証
- 外部リンクの URL スキーム制御、target=_blank、リファラー、外部送信内容の確認
- GPS 権限、位置情報の取り扱い、共有・クリップボード・JSON エクスポートの機密性確認
- Service Worker のスコープ、キャッシュポイズニング、バージョン切替、オフライン時の動作確認
- IndexedDB / localStorage の破損・容量超過・データ消去・端末共用のリスク評価
- 依存関係・地図データ生成工程・GitHub 権限・ブランチ保護・Netlify 配信権限の確認
- 脆弱性発見時の連絡・修正・再検証・公開判断の運用体制確認
5. 公開可否の判定記録
専門家は次の観点で「合格/条件付き/不合格/未確認」を記録してください。現在の判定はすべて未確認です。
| 判定項目 | 現時点 |
|---|---|
| 不正スクリプト実行対策 | 未確認 |
| 個人情報保護と共有制御 | 未確認 |
| 外部 API・外部送信 | 未確認 |
| 更新・オフライン・データ整合性 | 未確認 |
| 依存関係・配信基盤 | 未確認 |
| 総合公開可否 | 未判定 |
監査者名・所属、対象コミット SHA、対象 URL、実施日、試験環境、発見事項、再現手順、重大度、修正コミット、再検証結果を別途記録してください。公開判定は監査実施者と運用責任者が行うものです。
6. 参照ファイルと検証手順
主要ファイル:index.html(画面・帰宅計画)、field-guide.js(現地記録)、share.js(共有)、offline.js(オフライン地図)、handbook.js(手帳)、sw.js(キャッシュ)、_headers(ヘッダー)、tools/build-regions.mjs(地図データ生成)。
推奨:対象ブランチとコミットを固定 → ソースレビュー → テスト環境で動的診断 → Android の PWA とブラウザで動作検証 → 発見事項を修正 → 再診断 → 公開判定。検証対象には実在の家族情報を使わず、テストデータを使用してください。