Document
Practice Guide
Security Practice Arcade をローカルで練習するための手順です。
Security Practice Arcade をローカルで練習するための手順です。
前提
- このサービスはローカルまたは閉じた検証環境で使う前提です
- 実在の個人情報や秘密情報は入力しません
- 脆弱版は教材用の再現であり、公開運用を想定した実装ではありません
起動手順
cd src
composer install
npm install
php artisan migrate:fresh --seed
php artisan serve
別ターミナルでフロント開発サーバーを使う場合:
cd src
npm run dev
起動後は http://localhost:8000 を開きます。
デモアカウント
aiko@example.local/passwordkenji@example.local/passwordrina@example.local/passwordsora@example.local/passwordmentor@example.local/password管理者ロールです
基本の進め方
- トップページを開く
- デモアカウントでログインする
- ステージ一覧から 1 つ選ぶ
- 先に脆弱版を見る
- 同じステージで修正版に切り替える
- 送信内容、保存結果、レスポンス例、解説を見比べる
- ランキング画面で結果の変化を確認する
ステージごとの見方
Stage 1
テーマ: クライアント値を信用したスコア保存
- ゲームを開始してスコアを作る
- 脆弱版では送信前の
client_scoreを変えてみる - 修正版では同じような値が拒否されるか確認する
Request ExampleとServer Decisionの差を見る
Stage 2
テーマ: 他人のスコアを書き換えられる認可不備
- 更新対象ユーザーを自分以外に切り替える
- 脆弱版で誰のスコアが更新されるか確認する
- 修正版で更新対象がどう決まるか確認する
Stage 3
テーマ: 管理画面の権限不備
- 一般ユーザーで管理操作を試す
- 次に
mentor@example.localで同じ画面を見る - 脆弱版では導線がなくても操作できる点を確認する
- 修正版では権限エラーになることを確認する
Stage 4
テーマ: ランキング表示での危険な出力
- コメント欄に HTML 風の文字列を入れて保存する
- 脆弱版では表示のされ方が変わることを確認する
- 修正版では同じ文字列がテキストとして表示されることを確認する
Stage 5
テーマ: CSRF 的な勝手な状態変更
- まず正規画面からプロフィール更新を行う
- 次に外部サイトを模した送信を試す
- 脆弱版では状態変更が成立することを確認する
- 修正版では追加トークンで防いでいることを確認する
Stage 6
テーマ: API の過剰なレスポンス
profileとrankingを切り替える- 脆弱版で不要な項目が返っていないか確認する
- 修正版で必要最小限に絞られているか確認する
おすすめの練習順
初めて触る場合はこの順が分かりやすいです。
- Stage 1
- Stage 2
- Stage 3
- Stage 4
- Stage 5
- Stage 6
管理画面の使い方
管理画面では以下を確認できます。
- ユーザー一覧
- スコア一覧
- ランキングリセット
- ダミーデータ再投入
- ステージ進捗の初期化
- 監査ログの確認
繰り返し練習したい場合は、ダミーデータ再投入か php artisan migrate:fresh --seed を使います。
見るべきポイント
- リクエストで何を送っているか
- サーバー側が何を信用しているか
- 保存された値がどう変わるか
- レスポンスに何を返しているか
- 修正版でどのチェックが追加されたか
学習のコツ
- まず挙動を観察してから解説を読む
- 脆弱版と修正版で差が出る項目だけに注目する
- 画面だけでなく JSON パネルも合わせて見る
- Stage 3 は一般ユーザーと管理者の両方で見る
リセット方法
教材データを最初の状態に戻すには:
cd src
php artisan migrate:fresh --seed