練習モード
練習モードでは、脆弱なコードを特定して正しい修正を選択するコードレビューチャレンジを提供します。OWASP Top 10 (Web)、OWASP API Top 10、OWASP Mobile Top 10、OWASP Client-Side Top 10をカバーする200以上のトピックで複数の言語で利用可能。
仕組み
各チャレンジは、脆弱性検出スキルと修復スキルの両方をテストするために設計された2段階システムに従います:
フェーズ1 — 脆弱性を見つける
コードスニペットを読み、どのブロックにセキュリティ脆弱性が含まれているかを特定します。ハイライトされたいくつかのオプションから正しいブロックをクリックして進めます。
フェーズ2 — 修正を選択
脆弱性を特定したら、複数のオプションから正しい修正を選択します。各オプションは妥当に見えますが、セキュリティ問題を適切に対処するのは1つだけです。
チャレンジインターフェース
典型的なコードレビューチャレンジは次のようになります:
ユーザー検索のSQL Injection
backend / python / web
ユーザー詳細エンドポイントがクエリ文字列からidを取得し、それを使用して一致する行を取得します。下の候補ブロックの1つは、信頼すべきでない場合にその値を信頼します。
言語の選択
各トピックには複数のプログラミング言語のチャレンジがあります。スタック設定がデフォルトで表示される言語を決定します — バックエンド開発者はPython、Java、またはGoのチャレンジを見て、フロントエンド開発者はReact、Vue、またはAngularを見ます。
言語セレクターを使用していつでも言語を切り替えられます。設定が保存されるため、常に優先スタックでチャレンジが最初に表示されます。
ヒントの使用
各フェーズには独自のヒントボタンがあります。ヒントを使用すると、そのフェーズで獲得するスコアが半分になり、下限は10 XPです — つまり、100 XP相当のクリーンな初回試行フェーズは、ヒントを使用すると50 XPに、60 XP相当の2回目試行フェーズは30 XPになります。ヒントは答えを与えずに的を絞ったガイダンスを提供します — 正しい方向を示しながらも、批判的に考える必要があります。
ヒントはオプションです。初めて見る脆弱性タイプに遭遇したときに特に役立ちます。
スコアリングとXP
各フェーズは独立してスコア付けされます。初回試行の正解はフェーズの完全なXPを獲得します。繰り返しの誤答とヒントの使用は両方ともそれを減らします。
| フェーズ結果 | ヒントなし | ヒントあり |
|---|---|---|
| 1回目で正解 | 100 XP | 50 XP |
| 2回目で正解 | 60 XP | 30 XP |
| 3回目以降で正解 | 30 XP | 15 XP |
| チャレンジあたりの最大 (両フェーズ初回試行、ヒントなし) | 200 XP | |
ヒント削減は50%カットで下限は10 XPであるため、ヒント付きの3回目試行フェーズでも少なくとも10 XPは獲得します。2つのフェーズは独立して実行されます — フェーズ1のヒントまたは誤答はフェーズ2に影響しません。
間違って推測したときに何が起こるか
どちらのフェーズでも最初の誤答は同じコードで再試行するように促します。フェーズ1での2回目の誤答後、見逃した脆弱性の現実世界の結果を説明する短いストーリーダイアログが表示されてから再試行できます。試行回数の上限はありません — 何度でも再試行できますが、3回目を超える各追加試行はフェーズを30 XPに上限します。
チャレンジ完了
両フェーズを完了すると、スコアの内訳が表示されます:
フェーズ1からフェーズ2へのフローを読む
2段階構造は、脆弱性検出と修復が異なるスキルであるために存在します。フェーズ1は目を訓練します: 完全な関数またはメソッドが与えられたとき、どの行が危険なものか。コードを書くように求められているのではなく、レビュアーが読むように読むことを求められています。脆弱な行は最も構文的に興味深いものではありません。通常は、リクエストパラメータを後で解析される文字列に連結するような、開発者が考えずに書くような静かな行です。
フェーズ2は判断力を訓練します。問題がどこにあるかを知ったら、プラットフォームはいくつかの妥当な修正を表示します。それらのほとんどはコンパイルされ、実行され、合理的に見えます。完全に脆弱性を閉じるのは1つだけです。一部のオプションは明らかな症状をパッチしますが、基礎となるプリミティブをそのままにします。一部のオプションは過剰に修正し、関数を壊します。フェーズ2の目標は、元のものよりも安全に見えるかどうかだけでなく、修正がなぜ機能するかを推論させることです。誤答を学習ガイドとして扱ってください: それぞれは、実際の開発者が実際のプルリクエストで犯す本物の間違いです。
推測が学習曲線を台無しにする理由
ヒントシステムはフェーズのXPを半分にします (下限10 XP)。これはペナルティのように聞こえますが、トレードとして構造化されています。トレードは、より低いスコアと引き換えに意味のあるガイダンスです。ヒントなしで推測すると、同じXPがかかり、何も学べません。フィードバックループが学習するには粗すぎるためです。クリックする前にスニペットを30秒未満読んでいる場合、ほぼ確実に推測しています。減速して、スニペットを2回読み、信頼境界がどこにあるかを仮説立て、それからクリックしてください。
新しい脆弱性クラスの正しいリズムは、慎重に読み、行き詰まったときにヒントを使い、スコアの減少を学習のコストとして受け入れることです。同じクラスで3つか4つのチャレンジの後、ヒントは必要なくなります。10個の後、自分のコードで同じパターンを見るようになります。その曲線は推測によって圧縮することは不可能です。これらのスニペットの背後にある攻撃チェーンに関するより深いコンテキストについては、学習モードの対応する学習シナリオを試してください。