演習モード

コードレビュー・チャレンジ

開発者は実際の脆弱なコードをレビューしてセキュリティ上の欠陥を特定し、複数の選択肢から正しい修正を選びます。検出力と修正力の両方を養う2フェーズ構成です。

2つのフェーズ、1つのチャレンジ。

01
検出

脆弱なブロックを見つける

開発者には1行以上の脆弱な行を含む実世界のコードスニペットが表示されます。セキュリティ上の欠陥を含むと思うブロックをクリックします。選択肢はなく、コードを読んで何が問題かを推論しなければなりません。

  • 本番環境に近いコードパターン
  • 実際のコード行をクリックで選択
  • 複数回の試行が可能
02
修正

正しい修正を選ぶ

脆弱なブロックが特定されると、開発者はもっともらしい選択肢の中から正しい修正を選びます。ディストラクター(誤答)には、よくありがちな間違った修正 — コードレビューを通過してもバグを本番に残してしまう類のもの — が含まれています。

  • 選択式の修正選択
  • もっともらしい誤答のディストラクター
  • 回答後に解説が表示される

チャレンジの進行中の様子。

auth-controller.js
1const express = require('express')
2const db = require('./db')
3 
4const q = `SELECT * FROM users WHERE email = '${email}'`
5const rows = await db.execute(q)
6return rows[0]
フェーズ1 — 脆弱性を見つける

ゲートキーピングではなく、学習のために調整されています。

ペナルティなしのヒント

開発者はいつでもヒントを要求できます。ヒントを使っても最終スコアは下がりません。目的は理解であって、罰則ではありません。

試行回数ベースのスコアリング

スコアは各フェーズで要した試行回数から計算されます。試行回数が少ないほど高スコアです。両フェーズとも一発で正解すれば最大スコアを獲得します。

回答後に必ず解説

修正を選択すると — 正解でも不正解でも — 各選択肢がなぜ安全か、または安全でないかをプラットフォームが説明します。ディストラクターには「間違い」というラベルだけでなく、失敗モードが解説されます。

脆弱なコードを読むことこそが、実際の仕事です。

ほとんどの開発者向けセキュリティトレーニングは、エンジニアにSQLインジェクションについての動画を見せ、選択式クイズに回答させます。コードレビュー・チャレンジはそれを逆転させ、まず開発者をコードの前に立たせ、コードレビューで求められるのと同じ種類の推論を強制します。検出と修正は別々に採点されます。なぜなら実際のレビューでは、何かが間違っていると分かることと、それをどう修正するかを知ることは別のスキルであり、エンジニアは一方だけが得意でもう一方は苦手ということがあり得るからです。

ご自身でチャレンジを試してみてください。

インタラクティブなデモでは3つの完全なコードレビュー・チャレンジを実行できるため、当社チームと話す前に2フェーズ構成を最初から最後まで体験できます。