セキュリティ
最終更新日: 2026年7月13日
Manako は、お客様のデータの安全性を最優先に考えています。
インフラストラクチャ
Section titled “インフラストラクチャ”Manako は Cloudflare のグローバルインフラストラクチャ上で稼働しています。サーバーレス(Cloudflare Workers)で稼働するため、OS やミドルウェアの管理が不要で攻撃面を最小化しています。
| 認証 | 対象 |
|---|---|
| SOC 2 Type II | Workers, D1, KV, R2, Pages |
| ISO 27001 | 情報セキュリティマネジメント |
| ISO 27701 | GDPR 準拠プライバシー管理 |
| PCI DSS | Workers, KV |
| 対象 | 方式 |
|---|---|
| 保存時(At Rest) | AES-256-GCM(D1, R2, KV すべて自動暗号化) |
| 通信時(In Transit) | TLS 1.3(全 Worker 間通信含む) |
| パスワード | PBKDF2-SHA-512 + ランダムソルト 16 バイト(100,000 回イテレーション、鍵長 256 ビット、タイミングセーフ比較) |
認証・セッション管理
Section titled “認証・セッション管理”- JWT(HS256): アクセストークン有効期限 15 分、リフレッシュトークン 7 日間
- httpOnly Cookie 認証: アクセストークン・リフレッシュトークンは httpOnly Cookie(
Secure,SameSite=Lax)としてブラウザに渡され、JavaScript からは読み取れません。ダッシュボード(SPA)は認証トークンを localStorage 等の JavaScript から読み取り可能な領域には保存しません - リフレッシュトークンローテーション: 使用時に旧トークンを即時無効化し、新トークンを発行
- リフレッシュトークン保存: Cookie の値そのものは Cloudflare KV に TTL 付きで保存・管理し、有効期限後に自動削除
- CSRF 対策: Cookie 経由の認証リクエストは Origin ヘッダーを検証し、許可されたオリジン以外からの状態変更リクエストを拒否(
SameSite=Laxによるクロスサイト送信制限と併用) - API Key:
mk_プレフィックス + 64 文字 HEX。SHA-256 ハッシュで保存。プレフィックス 11 文字のみ DB に記録
テナント分離
Section titled “テナント分離”- すべてのデータベースクエリに
team_idスコープを強制適用 - API Key はチーム単位で発行・管理
- 異なるチームのデータへのアクセスは不可能
アプリケーションセキュリティ
Section titled “アプリケーションセキュリティ”- 全 API エンドポイントで Zod スキーマバリデーション
- SSRF 防止: プライベート IP(
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16)、localhost、クラウドメタデータエンドポイント(169.254.169.254,metadata.google.internal)をブロック - HTTP ヘッダーインジェクション防止
- XSS エスケーピング(ステータスページ SSR)
ブラウザ側の防御(セキュリティヘッダー)
Section titled “ブラウザ側の防御(セキュリティヘッダー)”ダッシュボードと管理画面には以下のヘッダーを適用しています。
| ヘッダー | 値 |
|---|---|
| Content-Security-Policy | script-src に 'unsafe-inline' / 'unsafe-eval' を含めない。インラインスクリプトは SHA-256 ハッシュで個別に許可 |
| X-Frame-Options / frame-ancestors | クリックジャッキング防止(埋め込み全面禁止) |
| X-Content-Type-Options | nosniff |
| Referrer-Policy | strict-origin-when-cross-origin |
| Strict-Transport-Security | max-age=63072000; includeSubDomains; preload |
CSP は object-src 'none' / base-uri 'self' / form-action 'self' も指定し、万一 XSS が成立した場合の悪用経路を制限します。
| エンドポイント | リクエスト数 | ウィンドウ | キー |
|---|---|---|---|
認証(/auth/*) | 30 回 | 60 秒 | IP アドレス |
ダッシュボード(/dashboard/*) | 600 回 | 60 秒 | ユーザー ID |
Public API(/api/v1/*) — IP 単位 | 300 回 | 60 秒 | IP アドレス |
Public API(/api/v1/*) — API Key 単位 | プラン別(Free 60 / Pro 180 / Business 300) | 60 秒 | API Key ID |
Webhook セキュリティ
Section titled “Webhook セキュリティ”- HMAC-SHA256 によるペイロード署名検証
- プライベート IP・localhost へのWebhook送信を禁止(SSRF 防止)
通知のフラップガード
Section titled “通知のフラップガード”短時間で頻繁なステータス変化(フラッピング)が発生した場合、通知を自動的に抑制します。
- 閾値: 10 分以内に 3 回以上のステータス変化で通知を抑制
- インシデント判定: 5 回連続のダウンで初めてインシデントを作成
監視対象のセキュリティ
Section titled “監視対象のセキュリティ”- HTTP 監視時のリダイレクトは追従しません(SSRF 防止)
- 監視リクエストには識別可能な User-Agent(
Manako/1.0)を付与 - お客様が権限を持つサービスのみの監視を利用規約で義務付け
セキュリティプラクティス
Section titled “セキュリティプラクティス”- 定期的なコードレビュー
- 依存パッケージの定期更新
- 最小権限の原則に基づくアクセス制御
インシデント対応
Section titled “インシデント対応”セキュリティインシデントが発生した場合:
- 影響範囲の特定と封じ込めを迅速に実施します
- 影響を受けたお客様には 72 時間以内に通知します
- インシデントの詳細と対策を公開します
脆弱性の報告
Section titled “脆弱性の報告”セキュリティに関する問題を発見された場合は、下記までご連絡ください。責任ある開示を行っていただいた方には、感謝の意を表します。
- メール: security@manako.dev