自分のアプリのURLをよく見てください。/orders/1024——この数字を1023に変えたら、他人の注文が見えませんか?もし見えるなら、あなたのアプリには世界ランキング1位の脆弱性があります。高度な攻撃ではありません。URLの数字を変えるだけです。
このランキングはOWASP Top 10という、Webセキュリティの世界標準の統計です。2025年版の1位は「アクセス制御の不備」——つまり個人開発者が一番やりがちなミスが、世界で一番多い脆弱性だということです。この記事はこのTop 10を地図に、限られた時間でどこから直すべきかを整理します。
Top 10は「順番に全部やる」リストではなく、優先順位の地図。1位のアクセス制御から着手すれば、投資対効果が最大になる。
アプリケーションセキュリティの世界標準の出発点がOWASP Top 10です。公式の定義は“a standard awareness document for developers and web application security”——開発者のための、意識合わせの標準文書。実際の侵害データと専門家の合意から、最も危険な脆弱性カテゴリを10個並べています。
| 順位 | カテゴリ | 個人開発での典型例 |
|---|---|---|
| A01 | アクセス制御の不備 | URLのIDを変えると他人のデータが見える |
| A02 | セキュリティ設定ミス | デバッグモードのまま公開・管理画面が全開 |
| A03 | ソフトウェアサプライチェーンの不備 | 脆弱な依存パッケージを放置 |
| A04 | 暗号化の失敗 | パスワードを平文・弱いハッシュで保存 |
| A05 | インジェクション | SQL文字列連結・HTML直接出力(XSS) |
| A06〜A10 | 設計不備・認証不備・完全性・ログ不備・例外処理 | 通知ゼロ運用・エラー画面に内部情報 |
1位のアクセス制御の不備(Broken Access Control)の典型が、認可の確認漏れです。「ログインしているか」は確認しても、「そのデータがその人のものか」を確認していない——コードで書くとこの差は1行です。
// ❌ ログイン確認だけ: 誰でも他人の注文をIDで取れる(IDOR)
const order = await db.order.findUnique({
where: { id: orderId },
});
// ✅ 所有確認つき: 自分の注文しか取れない
const order = await db.order.findFirst({
where: { id: orderId, userId: req.user.id },
});
この形の脆弱性はIDOR(Insecure Direct Object Reference)と呼ばれます。対策は難しくありません——データを取るクエリすべてに、所有者の条件を機械的に入れる。難しいのは技術ではなく、全部のクエリで徹底する規律の方です。
The OWASP Top 10 is a standard awareness document for developers and web application security.出典OWASP Top 10:2025(公式サイト) 一次情報を確認2026-08-14 この内容の有効期限2027-02-14
穴は「知らない技術」ではなく「知っているのに全箇所で徹底できていない基本」に開く。チェックリスト化して機械的に回すのが唯一の対策。
アプリケーションセキュリティの記事は他人事の脅威話になりがちなので、編集部自身の実例を出します。当メディアの運営元はマーケットプレイス(ServiceDock)を開発しており、自分たちのコードレビューで実際にこの種の穴を見つけて直してきました。
この経験から学んだのは、セキュリティは知識ではなく運用だということです。編集部では新しいAPIを作るたびに固定のチェックリスト(認証→所有確認→入力上限→エラー整形→レート制限)を回しています。1回作れば数分で回せて、穴の大半はこの数分で防げます。
攻撃の入口の大半は、人間ではなくスキャナーです。公開されたWebアプリは知名度と関係なく、既知パターンの自動試行を受け続けます。OWASPの1位が示すのは「攻撃が高度化した」ではなく、基本の徹底漏れが世界中で最も多いという事実——個人開発者にとってはむしろ朗報で、高度な防御より先にやるべきことが明確だということです。
全部やろうとして何もやらないのが最悪。アクセス制御→認証→注入系の順に、手を動かす範囲を絞る。
アプリケーションセキュリティの学習は範囲が広く、完璧を目指すと着手できません。個人開発の現実に合わせて、効果の大きい順に3ステップへ絞ります。
開発環境で、別ユーザーのアカウントを2つ作り、片方でログインしたままURLのID・APIのパラメータをもう片方のものに変えて叩きます。見えてしまったらそれがIDORで、該当クエリに所有者条件を足します。データ取得系のエンドポイントを上から順に、機械的に。
SQL文字列の連結・HTMLへの変数直接埋め込みを grep で探します。ORMのパラメータ化・テンプレートの自動エスケープというフレームワークの標準の書き方に戻すだけで、インジェクション系はほぼ塞がります。認証・認可のより深い設計はAPI連携の記事の最小権限の考え方と、Webhook受信の署名検証もあわせて確認してください。
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る