セキュリティ自動診断 — 手作業ガイド

endai-system / 2026-03-04作成

1. GitHubリポジトリ設定

必須5分

Dependabotのアラートとセキュリティ自動更新を有効にします。.github/dependabot.yml はコードとしてpush済みですが、GitHub側の設定も必要です。

1-1. Dependabot Alerts の有効化

1
GitHubでリポジトリを開く
https://github.com/(ユーザー名)/endai-system
2
上部メニューから Settings タブをクリック
3
左サイドバーの Code security(旧: Code security and analysis)をクリック
4
以下の3項目を Enable にする:
  • Dependency graph — 依存関係の可視化(通常デフォルトON)
  • Dependabot alerts — 脆弱性のあるパッケージを通知
  • Dependabot security updates — 脆弱性修正PRを自動作成
画面の場所: Settings → 左メニュー「Security」セクション → Code security and analysis → 各項目の「Enable」ボタン

1-2. Branch Protection(任意)

mainブランチへのマージ前にセキュリティチェック通過を必須にする場合:

1
Settings → BranchesAdd branch protection rule
2
Branch name pattern: main
3
Require status checks to pass before merging にチェック → 検索窓で以下を追加:
  • npm audit
  • Security Lint
  • Secret Detection
補足: Branch Protectionは無料プランのpublicリポジトリ、またはTeam/Enterprise プランで利用可能です。privateリポジトリの無料プランでは制限があります。

2. E2Eテスト用の環境変数設定

必須10分

現在16件のテストがskipされています。テスト用の認証情報を設定すると全テストが有効になります。

2-1. テスト用ユーザーの確認・作成

Supabaseに以下の2種類のテストユーザーが必要です:

1
Supabase Dashboard を開く → endai-system のプロジェクトを選択
2
左メニューの Authentication → Users を開く
3
adminユーザー が存在するか確認。いなければ「Add user」で作成後、profiles テーブルの roleadmin に設定
4
authorユーザー(一般ユーザー)が存在するか確認。いなければ「Add user」で作成(roleはデフォルトの author でOK)

2-2. ローカル環境への設定

1
プロジェクトルートの .env.local を開く(なければ作成)
2
以下の4行を追記:
# セキュリティE2Eテスト用(adminロール)
TEST_ADMIN_EMAIL=admin-test@example.com
TEST_ADMIN_PASSWORD=ここにパスワード

# セキュリティE2Eテスト用(authorロール)
E2E_AUTHOR_EMAIL=author-test@example.com
E2E_AUTHOR_PASSWORD=ここにパスワード
3
テスト実行して確認:
npm run dev -- -p 3001
# 別ターミナルで:
npm run test:security
skippedが0になれば成功。

2-3. GitHub Actions への設定(CI用)

CIでもセキュリティE2Eを実行する場合:

1
GitHub → Settings → Secrets and variablesActions
2
New repository secret で以下を追加:
NameValue
TEST_ADMIN_EMAILadminユーザーのメール
TEST_ADMIN_PASSWORDadminユーザーのパスワード
E2E_AUTHOR_EMAILauthorユーザーのメール
E2E_AUTHOR_PASSWORDauthorユーザーのパスワード
注意: テスト用のユーザーは本番の管理者アカウントとは別に作成してください。テスト用のパスワードが万一漏洩しても被害を最小限にするためです。

有効になるテスト(16件)

3. OWASP ZAP 初回実行

必須15分

OWASP ZAP のベースラインスキャン(パッシブのみ)を手動で初回実行し、レポートを確認します。

3-1. コードのpush

1
まずセキュリティ関連の全ファイルをGitHubにpush:
cd C:/Users/kawag/work/endai-system
git add .github/workflows/zap-scan.yml \
        .github/zap-rules.tsv \
        .github/dependabot.yml \
        .github/workflows/security-audit.yml \
        .gitleaks.toml \
        eslint.config.mjs \
        package.json \
        e2e/helpers/auth.ts \
        e2e/security-*.spec.ts \
        SECURITY-AUTOMATION.md
git commit -m "feat: セキュリティ自動診断4層実装"
git push

3-2. ZAPスキャンの手動実行

2
GitHub → Actions タブを開く
3
左サイドバーの OWASP ZAP Baseline Scan をクリック
4
右上の Run workflow ボタンをクリック
5
target_url に本番URLを入力:
https://endai-system.vercel.app
Run workflow をクリック
6
実行完了まで 約5〜10分 待つ(ステータスが緑チェックになるまで)

3-3. レポートの確認

7
完了したワークフローの実行結果をクリック → 画面下部の Artifacts セクション → zap-report をダウンロード
8
ダウンロードしたZIPを解凍 → report_html.html をブラウザで開く
9
レポート内容を確認:
  • PASS: 問題なし
  • WARN: 警告(確認推奨)
  • FAIL: 問題あり(対応必要)
  • IGNORE: zap-rules.tsvで除外済み

3-4. ルール調整(必要な場合)

false positiveが多い場合、.github/zap-rules.tsv を編集:

# 形式: ルールID[TAB]アクション[TAB](説明)
# アクション: IGNORE=無視, WARN=警告のみ, FAIL=CIを失敗させる
10010	IGNORE	(Cookie No HttpOnly Flag - Supabase管理)
10017	IGNORE	(Cross-Domain JS - Stripe CDN)
補足: ZAPスキャンは毎週水曜3:00 JSTに自動実行されます。結果はGitHub Issueとして自動投稿されます。
Vercel Preview URL でのテスト: PRごとにVercelが生成するpreview URL(例: https://endai-system-xxx.vercel.app)を target_url に指定すれば、デプロイ前のスキャンも可能です。

4. ポルト社への相談事項

必須メール1通

自前の自動診断実施済みであることを伝え、手動診断のみの見積もりを依頼します。

メール案文

件名: 脆弱性診断のお見積もり依頼(手動診断のみ)

株式会社ポルト 御中

お世話になっております。
DXPO大阪にて脆弱性診断サービスの資料をいただきました。

弊社で運用中のWebアプリケーション(学会演題管理システム)について、脆弱性診断を検討しております。

システム概要:

  • 技術スタック: Next.js 16 + TypeScript + Supabase + Stripe + Vercel
  • 診断対象: 約67ページ、14 APIエンドポイント、1 FQDN
  • 推定リクエスト数: 150〜200
  • 認証: Supabase Auth(メール/パスワード + Google OAuth)
  • 決済: Stripe連携
  • 個人情報: 氏名、メール、所属機関等

ご相談事項:

  1. 自動診断(SAST/DAST/SCA)は自社で実施済みです(ESLint security、OWASP ZAP、npm audit、Playwright セキュリティE2Eテスト)。手動診断のみの診断プランは可能でしょうか?
  2. Firebase診断メニューを Supabase(PostgreSQL + Auth + Row Level Security)にも適用可能でしょうか?
  3. SAML/OAuth/OIDC診断は Google OAuth のみで、対象リクエスト数は5程度の見込みです。
  4. 上記を踏まえたお見積もりをいただけますでしょうか。

自社での自動診断結果レポートもご提出可能です。
ご検討のほど、よろしくお願いいたします。

相談時のポイント

確認事項背景
手動のみプランの可否価格表にはLight/Advanced/High-endの3プランしかなく、手動のみのカスタムプランが存在するか未確認
Supabase対応Firebase診断メニュー(20万円/人日)がSupabaseに適用可能かどうか。RLSポリシーの検証、認証フローの脆弱性チェックが必要
自動診断レポート提出自前診断の結果を提出することで手動診断の範囲・工数を絞れるか確認
再診断修正後の再診断は初回無料(価格表記載)。2回目以降は10万円

期待される見積もり範囲

項目想定金額
手動診断(200 req)200〜300万円(要見積)
Supabase/Auth診断(2人日)40万円
OAuth診断(5 req)15万円
報告書10万円
合計(税抜)265〜365万円

5. 将来的な改善

任意各30分〜

今すぐ必須ではないが、セキュリティ態勢をさらに強化できる改善項目です。

項目何をするか優先度
eslint-plugin-no-unsanitized DOM操作(innerHTML等)のサニタイズ漏れを検出するESLintプラグイン。現在flat config(ESLint 9)非対応のため保留中。対応されたら eslint.config.mjs に追加する
Semgrep より高度なSASTツール(OSS無料)。OWASP Top 10ルールセット付属。GitHub Actionsにsemgrep/semgrep-actionを追加するだけ
Snyk 商用SCAツール。無料枠(月200テスト)あり。npm auditより検出精度が高い。snyk.ioでサインアップ → GitHubリポジトリ連携
Upstash Redis レート制限をインメモリからRedisに移行。現在はVercelのサーバーレスインスタンス間でレート制限が共有されない。upstash.comの無料枠で対応可能
テストユーザー自動作成 CIでE2Eテスト実行前にSupabase Admin APIでテストユーザーを自動作成・削除するsetup/teardownスクリプトを作成

チェックリスト

endai-system セキュリティ自動診断ガイド — 2026-03-04作成