世界水準編の最初の道具は、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要件 | 関係する実践編の章 |
|---|---|---|---|---|
| V1 | Encoding and Sanitization | エンコーディングとサニタイズ | 8 | 第11章 |
| V2 | Validation and Business Logic | 入力検証と業務ロジック | 4 | 第8章・第11章 |
| V3 | Web Frontend Security | Webフロントエンドの安全 | 8 | 第11章・第12章 |
| V4 | API and Web Service | APIとWebサービス | 2 | 第12章 |
| V5 | File Handling | ファイルの取り扱い | 4 | (ファイル機能があれば) |
| V6 | Authentication | 認証 | 13 | 第10章 |
| V7 | Session Management | セッション管理 | 6 | 第10章 |
| V8 | Authorization | 認可 | 4 | 第10章 |
| V9 | Self-contained Tokens | 自己完結型トークン(JWTなど) | 4 | (使っていれば) |
| V10 | OAuth and OIDC | OAuthとOIDC | 5 | (外部ログインがあれば) |
| V11 | Cryptography | 暗号 | 3 | 第25章 |
| V12 | Secure Communication | 安全な通信 | 3 | 第12章 |
| V13 | Configuration | 設定 | 1 | 第12章 |
| V14 | Data Protection | データ保護 | 2 | 第9章 |
| V15 | Secure Coding and Architecture | 安全なコーディングとアーキテクチャ | 3 | 第12章・第13章 |
| V16 | Security Logging and Error Handling | セキュリティログとエラー処理 | 0 | 第12章(L2以上) |
| V17 | WebRTC | WebRTC(ブラウザ間の音声・映像通信) | 0 | (使っていなければ該当なし) |
原典は「機械同士のAPIならV3は関係ない」「OAuthやWebRTCを使っていなければ、その章は無視してよい」と明記しています。17章すべてを読む必要はありません。自分のアプリに存在する機能の章だけを選び、残りは「該当なし」と記録します。これは内部統制の評価で、自社に存在しない業務プロセスの項目を「対象外」とするのと同じ扱いです。
実践編の演習は、ASVSのどこに当たるか
実践編の第9〜13章でやったことは、知らないうちにASVSのL1要件の一部を検証していました。対応づけると、専門家に「ここまでは確認済みです」と番号で伝えられるようになります。
| ASVS 5.0 要件番号 | 要件の要旨(筆者による要約) | 確かめた章 |
|---|---|---|
| 1.2.4 | データベースへの問い合わせはパラメータ化クエリやORMを使い、SQLインジェクションから守られている | 第11章 |
| 1.2.1 | HTMLなどへの出力時に、文脈に合ったエンコーディングをしている | 第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.1 | APIキーやセッショントークンなどの機微情報を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章で作った点検ノートの下に追加してください。
このリポジトリを、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で採点する
- OWASPの公式リポジトリから、ASVS 5.0の要件一覧(CSVまたはJSON形式で配布されています)を入手し、レベル1の要件だけを表計算ソフトに抜き出します。
- 第8章の全体図を横に置き、自分のアプリに存在しない機能の章を「該当なし」にします。V17(WebRTC)、V10(OAuth/OIDC)、V9(自己完結型トークン)、V5(ファイル)は、使っていなければここで外れます。
- 上の対応表にある12項目は、実践編の点検ノートの結果を出発点にします。第10章・第11章の確認で「要対応」だったものは「満たさない」です。「問題なし」だったものは、その確認で要件全体を確かめられたかを見直してから「満たす」にします。たとえば7.4.1は、ログアウト後に「戻る」で画面が出ないだけでは判定できません。サーバーが古いセッションを拒否するかの確認が要ります。Supabaseでは発行済みのアクセストークンが期限まで有効なので、ASVSの原典が求める対策(無効にしたトークンの一覧を持つ、など)が無ければ「満たさない」か「分からない」です。確かめきれないものは「分からない」にします。
- 残りの要件について、上の定型文でAIに判定させます。作らせたセッションとは別のセッションで行います(第13章の原則)。
- AIが「コードからは判断できない」とした要件を、AIが示した方法で自分の目で確かめます。確かめられなかったものは「分からない」のまま残します。
- 「満たさない」を深刻な順に並べ、第13章の手順で1件ずつ修正し、再採点します。
- 最後に、「満たす」「満たさない」「該当なし」「分からない」の件数を数え、点検ノートに日付入りで記録します。「分からない」の一覧は、第27章で専門家に相談するときの持ち物になります。
まとめ
- 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区分で記録し、「分からない」を専門家への相談項目として残す。
出典
- OWASP Application Security Verification Standard (ASVS)(OWASP, 2025)
- OWASP ASVS 5.0 原文(GitHub、5.0/en ディレクトリ)(OWASP, 2025。章構成・レベル定義・要件番号はここから転記。要件数は2026年10月時点のmasterブランチで筆者が集計)
- OWASP Artificial Intelligence Security Verification Standard (AISVS) 1.0(OWASP, 2026年6月24日)
- OWASP Top 10:2025(日本語版)(OWASP, 2025)
- OWASP Cheat Sheet Series「Password Storage Cheat Sheet」(OWASP)