世界水準編第20章

OWASP ASVS 5.0で自分のアプリを採点する

読む目安:約60分17章・3レベルの検証基準で、専門家と同じ物差しを手に入れる

世界水準編の最初の道具は、OWASP ASVS(Application Security Verification Standard、アプリケーションセキュリティ検証基準)です。Top 10が「気をつける項目」の一覧だったのに対し、ASVSは「合格か不合格かを判定できる要件」の一覧です。この章では、2025年5月に公開された5.0の構造を読み、実践編で確かめたことがASVSのどの要件に当たるかを対応づけ、自分のアプリをレベル1で採点します。

この章の学習目標

  • ASVSとOWASP Top 10の役割の違いを説明し、ASVS 5.0の17章(V1〜V17)と3つのレベルの意味を人に説明できるようになる
  • 実践編の第9〜13章で確かめた項目が、ASVS 5.0のどの要件番号に当たるかを対応づけられるようになる
  • 自分のアプリをレベル1の要件で「満たす/満たさない/該当なし/分からない」の4区分で採点し、記録として残せるようになる

ASVSとは:Top 10との違い

応用編まで、私たちはOWASP Top 10:2025を「観点の一覧」として使ってきました。Top 10は意識づけの文書です。「アクセス制御の不備が最も多い」と教えてくれますが、「あなたのアプリは合格か」とは答えてくれません。

ASVSはそこを埋める文書です。原典の定義では、ASVSは「Webアプリケーションとサービスのためのセキュリティ要件を定義する」基準で、各要件は「検証可能で、合格か不合格かの判定で終わる」ものに限られます。要件はすべて「〜であることを検証する(Verify that)」という形で書かれ、推奨(should)ではなく必須(must)だけで構成されています。

経理の言葉に置き換えるなら、Top 10は「監査で指摘されやすい論点の一覧」、ASVSは「内部統制の評価項目書」です。評価項目書には項目ごとに番号が振られ、整備状況を「有効/不備」で記録します。ASVSの要件番号も同じ役割を果たします。要件の番号は「章.節.項目」の3つの数字で表され、たとえば 1.2.4 はV1(エンコーディングとサニタイズ)の第2節(インジェクション防止)の4番目の要件です。専門家との会話では、この番号がそのまま通じます。

原典は使い道として、設計の指針、安全なコーディングの基準、自動テストの設計、開発者教育、そして「調達の条件」を挙げています。発注者が「ASVSレベル2で開発すること」と契約に書き、受注者がそれを満たした証拠を出す、という使い方です。あなたが将来、業務システムの開発を外部に委ねる立場になったとき、この一行を仕様書に入れられるかどうかで、納品物の安全性は大きく変わります。

レベルL1/L2/L3

ASVSには3つの検証レベルがあります。5.0の原典は、レベルを「リスク低減と実装の手間を比べた優先度」で決めたと説明しています。

レベル原典の位置づけ要件の割合(原典の記述)この教材での目安
L1アプリを守るときに考えるべき最小限の要件。「重大または基本的な、第一線の防御」。参入の壁を低くするため、できるだけ少なくした約20%個人開発・社内ツールは、まずここ
L2「ほとんどのアプリが目指すべきレベル」。L1とL2を合わせて全体の約70%を実装する約50%他人のデータを預かるなら、ここを目標に
L3最高水準の安全性を示したいアプリのための、残り約30%。多層防御や、有用だが実装が難しい統制約30%決済・医療・金融など。専門家と組む領域

原典は例として、「限られた機微情報しか集めていない初期のスタートアップはL1から始めてよいが、銀行がオンラインバンキングでL3未満を顧客に説明するのは難しいだろう」と書いています。どのレベルを目指すかは、ASVSが決めるのではなく、「扱うデータの重さ」と「利用者の期待」から自分で決めるものです。第3章で扱った「見るだけ/入力やログインがある/他人のデータやお金を扱う」の3段階が、ここでそのまま使えます。

5.0ではL1が「達成しやすいように再設計」され、要件数が全体の約2割に絞られました。筆者が2026年10月時点のGitHub上の要件一覧から数えたところ、全345要件のうちL1は70要件でした。70項目なら、非エンジニアでも1日あれば一通り読めます。

5.0の章構成(V1〜V17)

ASVS 5.0は17の章に分かれています。次の表は、OWASPの公式リポジトリ(github.com/OWASP/ASVS の 5.0 ディレクトリ)にある章ファイル名から転記したものです。

章原題日本語の目安L1要件関係する実践編の章
V1Encoding and Sanitizationエンコーディングとサニタイズ8第11章
V2Validation and Business Logic入力検証と業務ロジック4第8章・第11章
V3Web Frontend SecurityWebフロントエンドの安全8第11章・第12章
V4API and Web ServiceAPIとWebサービス2第12章
V5File Handlingファイルの取り扱い4(ファイル機能があれば)
V6Authentication認証13第10章
V7Session Managementセッション管理6第10章
V8Authorization認可4第10章
V9Self-contained Tokens自己完結型トークン(JWTなど)4(使っていれば)
V10OAuth and OIDCOAuthとOIDC5(外部ログインがあれば)
V11Cryptography暗号3第25章
V12Secure Communication安全な通信3第12章
V13Configuration設定1第12章
V14Data Protectionデータ保護2第9章
V15Secure Coding and Architecture安全なコーディングとアーキテクチャ3第12章・第13章
V16Security Logging and Error Handlingセキュリティログとエラー処理0第12章(L2以上)
V17WebRTCWebRTC(ブラウザ間の音声・映像通信)0(使っていなければ該当なし)

原典は「機械同士のAPIならV3は関係ない」「OAuthやWebRTCを使っていなければ、その章は無視してよい」と明記しています。17章すべてを読む必要はありません。自分のアプリに存在する機能の章だけを選び、残りは「該当なし」と記録します。これは内部統制の評価で、自社に存在しない業務プロセスの項目を「対象外」とするのと同じ扱いです。

実践編の演習は、ASVSのどこに当たるか

実践編の第9〜13章でやったことは、知らないうちにASVSのL1要件の一部を検証していました。対応づけると、専門家に「ここまでは確認済みです」と番号で伝えられるようになります。

ASVS 5.0 要件番号要件の要旨(筆者による要約)確かめた章
1.2.4データベースへの問い合わせはパラメータ化クエリやORMを使い、SQLインジェクションから守られている第11章
1.2.1HTMLなどへの出力時に、文脈に合ったエンコーディングをしている第11章
3.2.2文字として表示したい内容はHTMLとして描画せず、安全な描画機能を使う第11章
2.2.2入力検証は信頼できるサーバー側で行い、ブラウザ側の検証を安全対策として頼らない第8章・第11章
6.2.1パスワードは8文字以上。15文字以上を強く推奨第10章
7.4.1ログアウトや期限切れの後、そのセッションを一切使えなくする第10章(画面の確認に加え、サーバー側の確認が必要)
8.2.1 / 8.2.2機能ごと、データごとのアクセスを、明示的な権限を持つ利用者に限定する(IDORとBOLAの防止)第10章
8.3.1認可の規則はサーバー側で強制し、ブラウザ側のJavaScriptのような操作可能な統制に頼らない第10章
12.2.1外部に公開するHTTPサービスとの通信はすべてTLSで、暗号化なしに戻らない第12章
13.4.1.gitなどのバージョン管理の情報を含めずに配備する第12章
14.2.1APIキーやセッショントークンなどの機微情報をURLやクエリ文字列に含めない第9章
15.2.1脆弱性のある依存部品を、定めた期限を超えて放置していない第12章

注意したいのは、ASVSには「文書化の要件」があることです。たとえば 6.1.1 は「総当たりやパスワードリスト攻撃への防御方法が、アプリの文書に定義されている」ことを求めています。8.1.1 は認可の規則の文書化です。原典は、文書化の要件は各章の最初の節に置かれ、必ず対応する実装の要件と対になっていると説明しています。第13章の演習で「持ち主への質問」に答えて作った業務ルールの一覧は、まさにこの文書に当たります。

5.0での主な変更点

4.0.3(2021年10月)から約3年半ぶり、2025年5月に公開された大改訂で、番号が全面的に振り直されました。4.0系の番号で書かれた古い記事や診断報告書は、5.0の番号とは一致しません。確認できた主な変更は次の通りです。

  • CWE(共通脆弱性タイプ一覧)への直接の対応付けを廃止。原典は、分類だけのCWEがあることや、1要件を1つのCWEに対応づけにくいことを理由に挙げています。
  • AI向けの要件は別規格AISVSへ。OWASP AISVS(Artificial Intelligence Security Verification Standard)1.0は2026年6月24日に公開され、12章構成で、ASVSと同じくL1〜L3の3段階です。AIを組み込んだアプリは、ASVSとAISVSの両方を見ることになります。
  • パスワードの最小長は8文字、15文字以上を強く推奨(6.2.1)。あわせて、文字種の強制を禁じ(6.2.5)、貼り付けやパスワードマネージャーの利用を許可し(6.2.7)、秘密の質問を禁じています(6.4.2)。
  • L1を達成しやすく再設計し、L3を大幅に拡張。L1は「参入の壁を下げる」ことを目的に絞り込まれました。

採点のしかた:4つの区分で記録する

採点は「満たす/満たさない」の二択にしないでください。非エンジニアが自力で判定できない要件は必ずあります。「分からない」を正直に残すほうが、点検としては価値があります。

区分意味次にすること
満たす自分の目で設定画面やコードを見て、またはテスト用アカウントで確かめた確認日と方法を書く
満たさない確かめた結果、要件に反する状態だった第13章の手順で修正し、再採点する
該当なしその機能や技術を使っていない(例:ファイルアップロードがない、OAuthを使っていない)理由を一言書く
分からない要件の意味は分かるが、自分では確かめられないAIに確認方法を出させ、それでも無理なら専門家に聞く項目として残す

採点表の列は「要件番号/要件の要旨/区分/確認日/確認方法/備考」の6つで十分です。第8章で作った点検ノートの下に追加してください。

AIへの頼み方(ASVS 5.0 L1要件ごとの確認)
このリポジトリを、OWASP ASVS 5.0 のレベル1の要件に照らして確認してください。

前提:
- あなたはこのコードを書いた人ではなく、独立した検証担当者として読んでください
- 推測で補わず、コードと設定ファイルから読み取れることだけを根拠にしてください
- 秘密情報の値そのものは絶対に出力しないでください
- 攻撃用の文字列やコードの例は出力しないでください
- 修正はまだしないでください。報告だけお願いします

手順:
1. まず、このアプリに存在する機能(ログイン、ファイルアップロード、OAuth、WebSocket、JWT など)を一覧にし、ASVS 5.0 の17章のうち「該当なし」にできる章を理由付きで挙げてください
2. 該当する章のレベル1要件を、要件番号(例:8.2.2)ごとに次の4区分で判定してください
   満たす/満たさない/該当なし/コードからは判断できない
3. 判定の根拠として、ファイル名と行番号、または設定箇所を示してください
4. 「コードからは判断できない」とした要件については、私が自分で確かめる方法(設定画面のどこを見るか、テスト用アカウントで何をするか)を書いてください
5. 文書化の要件(各章の第1節)については、どんな文書を用意すべきかを一言で書いてください

報告は「要件番号/要旨/判定/根拠/私が確かめる方法」の表にしてください。

演習:自分のアプリをASVS 5.0のL1で採点する

所要時間:約60分(修正は別途)
  1. OWASPの公式リポジトリから、ASVS 5.0の要件一覧(CSVまたはJSON形式で配布されています)を入手し、レベル1の要件だけを表計算ソフトに抜き出します。
  2. 第8章の全体図を横に置き、自分のアプリに存在しない機能の章を「該当なし」にします。V17(WebRTC)、V10(OAuth/OIDC)、V9(自己完結型トークン)、V5(ファイル)は、使っていなければここで外れます。
  3. 上の対応表にある12項目は、実践編の点検ノートの結果を出発点にします。第10章・第11章の確認で「要対応」だったものは「満たさない」です。「問題なし」だったものは、その確認で要件全体を確かめられたかを見直してから「満たす」にします。たとえば7.4.1は、ログアウト後に「戻る」で画面が出ないだけでは判定できません。サーバーが古いセッションを拒否するかの確認が要ります。Supabaseでは発行済みのアクセストークンが期限まで有効なので、ASVSの原典が求める対策(無効にしたトークンの一覧を持つ、など)が無ければ「満たさない」か「分からない」です。確かめきれないものは「分からない」にします。
  4. 残りの要件について、上の定型文でAIに判定させます。作らせたセッションとは別のセッションで行います(第13章の原則)。
  5. AIが「コードからは判断できない」とした要件を、AIが示した方法で自分の目で確かめます。確かめられなかったものは「分からない」のまま残します。
  6. 「満たさない」を深刻な順に並べ、第13章の手順で1件ずつ修正し、再採点します。
  7. 最後に、「満たす」「満たさない」「該当なし」「分からない」の件数を数え、点検ノートに日付入りで記録します。「分からない」の一覧は、第27章で専門家に相談するときの持ち物になります。
注意:採点の対象は自分のアプリだけ ASVSの要件を確かめる行為には、テスト用アカウントでの閲覧確認や設定画面の目視が含まれます。これらは、自分が作り、自分が管理するアプリに対してのみ行ってください。他人のサービスに対してASVSの要件を「確かめる」ことは、相手の許可がない限り不正アクセス禁止法に触れるおそれがあります。
補足:採点結果の正しい読み方 L1の要件を全部満たしても、「安全が証明された」わけではありません。原典も、L1は「外部からのブラックボックス診断だけで検証できるとは限らない」と断っています。採点表は、専門家と話すときに「どこまで見て、どこが見えていないか」を示す資料です。自分で確かめた範囲と、確かめられなかった範囲が分かれていることに価値があります。

まとめ

  • OWASP Top 10は意識づけの一覧、ASVSは「合格か不合格か」を判定できる要件の一覧。ASVS 5.0(2025年5月)は17章・約345要件で、要件は「章.節.項目」の番号で呼ばれる。
  • レベルはL1(約20%、最小限の第一線の防御)、L2(約50%、ほとんどのアプリの目標)、L3(約30%、最高水準)。個人開発・社内ツールはL1、他人のデータを預かるならL2を目標にする。使っていない機能の章は「該当なし」でよい。
  • 実践編の点検はASVSのL1要件(1.2.4、6.2.1、8.2.2、8.3.1、12.2.1など)の検証に当たる。採点は「満たす/満たさない/該当なし/分からない」の4区分で記録し、「分からない」を専門家への相談項目として残す。

出典