SE Review Request — v3 (Updated)

insta-auto — リリース前 SE確認依頼

Instagram自動投稿支援アプリ / セキュリティ修正完了報告 + 残課題評価
作成日2026-03-29 バージョンv3(セキュリティ修正後) 判定条件付きリリース可 作成高木悠哉

総合判定: 条件付きリリース可

v2 で検出された CRITICAL 3件・HIGH 5件を含む15件の脆弱性のうち、
リリースブロッカーとなる10件はすべて修正済みです。
残る5件(MEDIUM 3件・LOW 2件)は運用に支障のない改善項目であり、
下記「残課題」を認識した上で、限定リリース(1店舗)は可能と判断します。

10
Fixed
3
Medium (残)
2
Low (残)
!

リリース条件(これらが未達ならリリース不可)

必須確認
手動作業が1件残っています Anthropic APIキーのローテーション(Anthropicコンソールでの旧キー無効化 + 新キー発行 + Cloudflare Secrets更新)。
.dev.vars はプレースホルダーに置換済みですが、旧キー自体はまだ有効です。リリース前に必ず実施してください。
  • !
    Anthropic APIキーのローテーション .dev.vars はプレースホルダー化済み。コンソールでの旧キー無効化 + wrangler secret put が必要
  • !
    本番パスワードの設定 現在 store_001 のパスワードは "demo"。顧客に渡す前に本番用パスワードに変更が必要
  • !
    Metaアプリレビュー申請 instagram_content_publish 権限の正式審査。現在は開発モード(テストユーザーのみ)
1

確認依頼の目的

飲食店向け Instagram 自動投稿アプリ insta-auto について、 v2 資料で指摘された脆弱性の修正状況を報告し、リリース可否の最終判断をいただくための資料です。

項目内容
アプリ名insta-auto
対象ユーザー飲食店オーナー・スタッフ(非エンジニア)
主機能料理写真アップ → AIキャプション+ハッシュタグ自動生成 → Instagram投稿
現在の状態本番環境稼働中・セキュリティ修正適用済み・テスト投稿成功
本番URLhttps://insta-auto.pages.dev/
2

システム構成概要(修正後)

ブラウザ(スマホ/PC) +-- HTTPS --> Cloudflare Pages (React SPA) | | JWT Bearer (24h有効) v Cloudflare Workers (Hono API) +-- POST /api/auth/login -> D1認証 (PBKDF2) + レート制限 +-- POST /api/upload -> マジックバイト検証 + base64変換 +-- POST /api/generate -> Claude API (Sonnet 4) [認証必須] +-- POST /api/publish -> KV -> Instagram Graph API +-- GET /api/temp-image/:id -> KV画像配信 (Content-Type制限) | +----------+-----------+ | Cloudflare D1 | stores(PW=PBKDF2, Token=AES-GCM) / posts | Cloudflare KV | 画像一時保存 (TTL=10分) + レート制限 +----------------------+ | Cloudflare Secrets | APIキー, JWT秘密鍵, 暗号化キー +----------------------+
フロントエンド
Cloudflare Pages
React + Vite / SPA
バックエンドAPI
Cloudflare Workers
Hono / TypeScript
データベース
Cloudflare D1 (SQLite)
stores / posts
一時ストレージ
Cloudflare KV
画像バッファ TTL=600秒
AI生成
Anthropic Claude Sonnet 4
画像認識 + キャプション生成
SNS連携
Instagram Graph API v21.0
Meta長期トークン (60日)
3

ユーザー操作フロー

1
ログイン
店舗ID + パスワード
2
画像選択
最大10枚 / 10MB制限
3
AI生成
10-20秒
4
プレビュー
キャプション確認・編集
5
投稿
IGに公開
4

修正完了項目(10件)

All Fixed
v2 で指摘されたCRITICAL 3件・HIGH 5件・MEDIUM 2件はすべて修正完了しました。 本番環境にデプロイ済み、検証テスト合格確認済みです。
#修正内容旧深刻度修正方法検証
1 パスワードハッシュを PBKDF2 に変更
旧: HMAC-SHA256(ソルトなし・計算コストなし)
CRITICAL PBKDF2 / SHA-256 / 100,000 iterations / ランダムソルト16byte OK
2 IGアクセストークンを AES-256-GCM で暗号化
旧: D1に平文保存
CRITICAL AES-256-GCM / IV 12byte / 暗号化キーは Cloudflare Secrets OK
3 .dev.vars の本番APIキーをプレースホルダーに置換
旧: 本番 Anthropic APIキーが平文記載
CRITICAL プレースホルダー化済み。キーローテーション(手動)が残存 一部
4 認証なしエンドポイント /api/generate-direct を削除
旧: 誰でもAI APIを呼べた
HIGH エンドポイント・ルートファイル・フロント側分岐をすべて削除 OK
5 Content-Type インジェクション対策
旧: ユーザー指定の mediaType をそのまま出力
HIGH ホワイトリスト(jpeg/png/webp/gif)+ X-Content-Type-Options: nosniff OK
6 画像アップロードのマジックバイト検証追加
旧: file.type のみチェック(偽装可能)
HIGH JPEG/PNG/GIF/WebP のファイルヘッダ(マジックバイト)を検証 OK
7 ログインのレート制限
旧: ブルートフォース対策なし
HIGH IP+storeId あたり5回/15分。KV で管理。6回目から 429 返却 OK
8 SELECT * を必要カラムのみに変更
旧: password_hash も含めて全カラム取得
HIGH 11カラムを明示指定(password_hash を除外) OK
9 セキュリティヘッダー 4種追加
旧: ヘッダーなし
MEDIUM X-Content-Type-Options, X-Frame-Options, HSTS, Referrer-Policy OK
10 CORS ワイルドカードサブドメイン許可を削除
旧: *.insta-auto.pages.dev を許可
MEDIUM localhost:5173 と insta-auto.pages.dev のみ許可 OK
5

本番環境での検証結果

All Pass
  • OK
    ログイン認証(PBKDF2) store_001 / demo で正常にJWTトークン取得。旧HMAC形式では認証不可。
  • OK
    /api/generate-direct が 404 を返す エンドポイント削除済み。認証なしでAI APIは呼べない。
  • OK
    セキュリティヘッダー(4種) X-Content-Type-Options: nosniff / X-Frame-Options: DENY / HSTS / Referrer-Policy
  • OK
    レート制限(5回/15分) 6回目の不正ログインで 429 返却を確認。15分後に自動解除。
  • OK
    IGトークン復号 + API呼び出し 暗号化済みトークンから正常にIG APIが動作。投稿テスト成功済み(3/28 実施)。
  • OK
    エラーメッセージ統一 「店舗IDまたはパスワードが正しくありません」に統一。店舗存在有無の情報漏洩なし。
6

残課題(5件) — リリース後対応可

リリース後
これらは運用に支障のない改善項目です。 限定リリース(1店舗)の段階では許容可能ですが、スケール前には対応が必要です。
MEDIUMJWT を localStorage に保存OWASP A07
現状: JWT トークンを localStorage に保存。XSS があればトークン窃取のリスク。
改善: httpOnly Cookie + CSRF トークンに移行。XSS の入口がないことを前提に、当面は許容。
MEDIUMIGトークン自動更新の仕組みがない運用
現状: 長期トークンの有効期限は60日。手動更新が必要。
期限: 2026-05-28(次回更新期日)
改善: Worker Cron Triggers で30日ごとに自動更新。スケール前に実装。
MEDIUM利用規約・プライバシーポリシーが未整備法務
現状: 料理写真が Anthropic(米国)のAIサービスに送信されることの告知なし。
改善: 利用規約ページを追加。AI処理・データ保存・免責事項を明記。外部顧客拡大前に必須。
LOWエラー監視・アラートがない運用
現状: Workers のログは Cloudflare ダッシュボードのみ。障害検知が遅れる可能性。
改善: Sentry / Cloudflare Analytics Engine でエラー率監視。
LOWAnthropic API 利用上限が未設定コスト
現状: 認証必須になったためリスクは大幅低減。ただし正規ユーザーの大量利用への対策なし。
改善: 店舗ごとの月間生成回数上限を設定。
7

v2 → v3 修正前後の比較

項目v2(修正前)v3(修正後)
パスワードハッシュ HMAC-SHA256(ソルトなし) PBKDF2 / 100K iterations / ソルト付き
IGトークン保存 D1に平文 AES-256-GCM 暗号化
認証なしAIエンドポイント /api/generate-direct が存在 削除済み(404)
ブルートフォース対策 なし IP+storeId 5回/15分
Content-Type検証 ユーザー入力をそのまま出力 ホワイトリスト + マジックバイト検証
セキュリティヘッダー なし 4種(nosniff, DENY, HSTS, Referrer)
CORSポリシー *.insta-auto.pages.dev 本番ドメインのみ
エラーメッセージ 「店舗が見つかりません」/「パスワードが正しくありません」 統一(情報漏洩防止)
DBクエリ SELECT *(password_hash含む) 必要カラムのみ明示指定
シークレット管理 .dev.vars に本番キー プレースホルダー化 + Cloudflare Secrets
8

外部依存と障害時の影響

依存先停止時の影響復旧見込み
Cloudflare (Pages/Workers/D1/KV)全機能停止Cloudflare SLA 99.99%
Anthropic Claude APIAI生成のみ停止。手動投稿は可能Anthropic status page 参照
Instagram Graph API投稿のみ停止。AI生成・プレビューは可能Meta status page 参照
Google Drive への依存はありません。 開発リポジトリは Google Drive とは独立したローカル環境にあり、デプロイ済みのシステムは Cloudflare で完結しています。
9

インフラ・リソース情報

項目
本番URLhttps://insta-auto.pages.dev/
API URLhttps://insta-auto-api.yuya-takagi0520.workers.dev
D1 Databaseinsta-auto-db (c1639e6f-1bd0-4be1-8721-8c40cbd3b21b)
KV NamespaceTEMP_IMAGES (a8381fbb02d849f49034642957deda7a)
Metaアプリfood-autov2 (App ID: 26224106680550189)
IGアカウント@ramen_yakiniku_demo (ID: 17841441738205808)
IGトークン期限2026-05-28
Secrets登録済みANTHROPIC_API_KEY, JWT_SECRET, TOKEN_ENCRYPTION_KEY
10

SE確認事項

セキュリティ修正10件の対応内容に不足はないか?
特に PBKDF2 iterations 100,000(CF Workers上限)、AES-256-GCM の実装方式について。
残課題5件を「リリース後対応」とする判断は妥当か?
1店舗限定・社内テストの段階では許容可能と判断。スケールアウト前に対応予定。
リリース前に追加で必要な作業はあるか?
APIキーローテーション、本番パスワード設定、Metaアプリレビュー以外に必要なものがあれば指摘をお願いします。
1店舗限定リリース(テスト運用)として、このまま進めてよいか?
最終的なGo/No-Go判断をお願いします。