ADR-001: reserve-optimizer 脅威モデル

ステータス: Accepted 日付: 2026-05-24 分類: Security

コンテキスト

reserve-optimizer はLINE Bot + Stripe + Cloudflare Workers + Google Apps Script(GAS)で構成された予約管理システム。

アーキテクチャ

[LINEユーザー] → [Cloudflare Worker] → [GAS Web App]
                     ↓                      ↓
               [Stripe Webhook]      [Google Sheets(DB代用)]

外部接続

  • LINE Messaging API(Webhook受信・メッセージ送信)
  • Stripe(決済・Webhook受信)
  • Cloudflare Workers(リバースプロキシ)
  • Google Sheets(データストア)

脅威一覧(STRIDE分類)

ID 脅威 STRIDE 影響 現状の対策 ステータス
T01 LINE Webhook署名偽装 Spoofing 虚偽予約・なりすまし HMAC-SHA256検証あり、タイミングセーフ比較 対応済
T02 Stripe Webhook署名偽装 Spoofing 虚偽決済完了通知 署名検証 + タイムスタンプ検証(5分以内)+ 冪等性 対応済
T03 GAS Web Appエンドポイントの未認証アクセス Elevation 全機能の不正実行 Worker→GAS間: x-gas-auth認証トークン検証 対応済
T04 管理者権限のハードコード Elevation 管理者なりすまし LINEユーザーIDで判定、固定値 低リスク
T05 顧客PIIのGoogle Sheets平文保存 Information Disclosure 個人情報漏洩 暗号化なし、Googleアクセス権限依存 一部対応
T06 Stripe決済情報の不正取得 Information Disclosure カード情報漏洩 StripeがPCI DSS準拠、自システムにはカード情報非保持 対応済
T07 リプレイ攻撃(Webhook再送) Repudiation 重複処理 Stripe/LINE双方: CacheServiceで冪等性確保(20分TTL) 対応済
T08 LINEメッセージの入力検証なし Tampering 意図しない処理実行 文字数制限(1000文字)+ 制御文字サニタイズ 対応済
T09 Webhookエンドポイントのレート制限なし Denial of Service サービス停止 Cloudflare Workers(エッジ側で一部緩和) 低リスク
T10 GAS_AUTH_TOKEN 漏洩時の無効化・rotation 手順なし Elevation / Operational トークン漏洩後の継続不正アクセス rotateAuthToken() 関数 + rotation runbook(docs/runbooks/token-rotation.md)・6ヶ月予防的 rotation 対応済

決定

優先対応(P0)

  1. T03 認証追加: GAS Web Appのエンドポイントに認証を追加。Cloudflare Worker側でシークレットトークン検証
  2. T08 入力検証: LINEメッセージの長さ制限・文字種フィルタリング

推奨対応(P1)

  1. T07 リプレイ対策: LINEイベントのイベントIDで冪等性チェックを追加
  2. T05 PII保護: Google Sheetsの共有設定を最小権限に見直し

受容(P2)

  1. T04 管理者ID固定: LINEプラットフォームがユーザーIDの一意性を保証するため低リスク
  2. T09 DoS: Cloudflare Workers + GAS無料枠の制限が事実上のレート制限として機能

結果

強み(既に適切に対策済み)

  • LINE/Stripe双方のWebhook署名検証が堅牢(タイミングセーフ比較含む)
  • Stripe決済はPCI DSS準拠のホスティング型、カード情報非保持
  • API keyはScriptProperties(GAS暗号化ストレージ)に保存

受容したリスク

  • Google SheetsのPII暗号化は当面対応しない(Googleアカウント保護に依存)
  • 管理者判定のハードコードは個人運用のため受容

残タスク

  • GAS Web Appエンドポイントに認証追加(T03)
  • LINEメッセージ入力バリデーション(T08)
  • LINEイベント冪等性チェック(T07)

参考

  • 対象リポジトリ: https://github.com/fukukei23/reserve-optimizer

This site uses Just the Docs, a documentation theme for Jekyll.