コンテンツにスキップ

セキュリティ

最終更新日: 2026年06月13日

Miseru は、配信する画像とアカウント情報の安全性を重視しています。本ページは実装に基づくセキュリティ仕様を記載します。

Miseru は Cloudflare のグローバルインフラ上で稼働しています。サーバーレス(Cloudflare Workers)で稼働するため、OS やミドルウェアの管理が不要で攻撃面を最小化しています。Cloudflare のコンプライアンス認証(SOC 2 Type II / ISO 27001 等)はインフラ層に適用されます。

対象方式
保存時(At Rest)Cloudflare による自動暗号化(R2 / D1 / KV)
通信時(In Transit)TLS(Cloudflare エッジ終端)
Upload TokenSHA-256 ハッシュで保存(平文は発行時に一度のみ表示し保持しない)
  • ダッシュボードログイン: GitHub OAuth(GitHub App の user-to-server フロー)。state を短命の HttpOnly Cookie に紐付けてログイン CSRF を防止します。
  • セッション: Cloudflare KV に 7 日間 TTL で保存。Cookie は HttpOnly / Secure / SameSite=Lax。セッション ID は 256bit ランダム。
  • Upload Token: msr_ プレフィックス + 256bit(64桁 HEX)。D1 には SHA-256 ハッシュのみを保存し、平文は発行直後に一度だけ表示します。失効・最終使用日時を管理します。
  • 配信 URL の署名: 推測不能な 128bit ID + kid 付き HMAC-SHA256 署名 + 有効期限(exp)。検証はタイミングセーフ比較で行います。kid(鍵バージョン)により鍵ローテーション時も既存 URL を壊しません。

アプリケーションセキュリティ

Section titled “アプリケーションセキュリティ”
  • アップロードは Content-Type(PNG / JPEG / WebP のみ)とサイズ(5MB 未満)を検証します。
  • commit_sha(HEX 7〜40桁)・viewport幅x高さ)・pr_number(正の整数)を形式検証します。
  • PR コメントに埋め込むユーザー入力(論理名・viewport)は markdown 構文を壊す文字を除去します(注入対策)。
エンドポイントリクエスト数ウィンドウキー
アップロード(/v1/upload120 回60 秒プロジェクト
  • GitHub Webhook を X-Hub-Signature-256(HMAC-SHA256)で検証します。検証はタイミングセーフ比較で行います。

本サービスは PR への画像表示を成立させるため、GitHub の画像プロキシ(Camo)を通す必要があり、配信 URL は認証なしで取得可能です。秘匿は「推測不能 ID + HMAC 署名 + 失効ポリシー」で担保しており、URL を知る者は閲覧できます(利用規約 §2)。これは設計上の仕様であり脆弱性ではありません。

  • すべてのコード変更にレビューサイクル(自動レビュー)を適用
  • 依存パッケージの定期更新
  • 最小権限の原則に基づくバインディング(各 Worker は必要なリソースのみをバインド)

セキュリティ上の問題を発見された場合は、Issue には書かず、以下へご連絡ください。責任ある開示に感謝します。

深刻な脆弱性(認証バイパス・署名偽造・データ漏洩等)は優先対応し、48 時間以内(暦日)に初回返答します。