第1章の結論は「危険の大きさは、誰が作ったかより、何を扱うかで決まる」でした。この章では、それを自分のアプリに当てはめるための物差しを作ります。扱うデータと利用者の範囲で3つの段階に分け、どこまで守る必要があるかを決めます。あわせて、「公開しない」という選択肢があることも確かめます。
この章の学習目標
- 資産・脅威・脆弱性・リスクの4つの言葉を、内部統制の言葉に置き換えて説明できるようになる
- 自分が公開しているものを3つの段階のどれかに分類し、その段階で最低限守るべきことを言えるようになる
- 他人の個人情報を預かる場合に、法律上どんな義務が生じるかを概要として説明できるようになる
4つの言葉を、内部統制の言葉で
セキュリティの議論は、ほぼ次の4つの言葉で組み立てられています。経理のリスク管理と同じ構造なので、置き換えて読むと見通しがよくなります。
| 言葉 | 意味 | 内部統制でいえば | ミニ銀行アプリなら |
|---|---|---|---|
| 資産 | 守る価値のあるもの | 現金、預金、帳簿、取引先の情報 | 利用者のメールアドレス、残高、取引履歴、あなたのアカウント |
| 脅威 | 資産に損害を与えうる出来事や行為者 | 横領、盗難、記帳ミス、災害 | 他人のデータを見ようとする第三者、乗っ取り、改ざん |
| 脆弱性 | 脅威が実現してしまう弱点 | 金庫の鍵が開いている、職務分掌がない、承認を飛ばせる | 所有者の確認がない、鍵がコードに書いてある |
| リスク | 脅威が脆弱性を突いて資産を損なう可能性と、その大きさ | 発生可能性 × 影響額で評価する | 「誰でも他人の残高が見える」なら高い |
ここで大切なのは、リスクは資産の大きさで決まる、という点です。金庫が空なら、鍵が開いていてもたいした被害は出ません。逆に、金庫に現金があるなら、小さな弱点も大きなリスクになります。アプリでいう「金庫の中身」が、扱うデータです。
レベル1:見るだけのサイト
教材サイト、用語集、アプリの紹介ページ。入力欄もログインもなく、誰が見ても同じ画面が出るものです。第2章の言葉では静的サイトに当たります。
預かるデータがないので、漏えいという被害は起きません。起きうるのは、ページの改ざん(内容を書き換えられる)と、乗っ取られて別の攻撃の踏み台にされること(偽サイトへの誘導など)です。被害は限定的ですが、ゼロではありません。
それでも守るべきことは2つあります。ひとつは、VercelやGitHubなど、サイトを置いている場所のアカウントに二要素認証(パスワードに加えて、スマートフォンのコードなどを求める仕組み)をかけること。改ざんや乗っ取りは、ほとんどがアカウントの側から起きます。もうひとつは、秘密情報を置かないこと。「見るだけ」のつもりで、AIのAPIキーをページのコードに埋め込んでいた、という例は珍しくありません。これは第9章で確かめます。
レベル2:入力やログインがある
問い合わせフォーム、会員ページ、自分だけが使う記録アプリ。利用者が何かを入力し、サーバーがそれを受け取って処理するものです。
ここから、2つの新しい口が開きます。ひとつはフォームです。入力欄は、利用者が自由な文字をサーバーに送り込める口で、そこに「命令」として解釈される文字が入ると、データベースや他の利用者の画面が操作されます(第5章、第11章)。もうひとつはログインです。ログインの仕組みが甘ければ、パスワードを当てられたり、ログイン済みの証明(トークン)を盗まれたりして、乗っ取られます。
「自分しか使わないから」は、安全の理由になりません。公開されている以上、誰でもログイン画面に到達できます。利用者が自分だけでも、そこに保存した記録は資産です。家計簿や健康記録のような個人的な内容なら、なおさらです。
レベル3:他人のデータやお金を扱う
社内ツール、複数人で使う管理画面、決済のある販売ページ、そして学習用であっても他人がアカウントを作れるミニ銀行。ここが本丸です。第1章の論文で見つかった深刻な脆弱性の多くは、この段階のアプリで、他人のデータに届いてしまうものでした。
この段階では、技術の話に加えて、法律と規程の話が入ってきます。
個人情報保護法の報告義務
氏名やメールアドレスのような他人の個人情報を預かっていて、それが漏えいした(またはそのおそれがある)場合、一定の事態に当たれば、個人情報保護委員会への報告と、本人への通知が法律で義務づけられています。個人情報保護委員会の資料によれば、報告対象となるのは、要配慮個人情報(病歴など)を含む場合、財産的被害のおそれがある場合(クレジットカード番号など)、不正の目的によるおそれがある場合、本人の数が1,000人を超える場合の4つです。
報告は2段階で、速報が発覚からおおむね3〜5日以内、確報が30日以内(不正の目的によるおそれがある場合は60日以内)です。2022年4月に施行された改正で義務化されました。「趣味で作ったアプリだから」という区別はありません。不正アクセスで漏えいしたなら、不正の目的によるおそれがある場合に当たります。
会社の情報を扱うなら、社内規程
社内ツールを自作して部署で使う場合、法律の前に社内規程があります。情報の持ち出し、外部サービスの利用、個人情報の取り扱い。たいていの会社では、情報システム部門の承認なしに社外のクラウドへ業務データを置くことを禁じています。「便利だから」で自作ツールにデータを入れると、善意でも規程違反になります。公開の前に、情報システム部門に相談してください。
判断の表と、「公開しない」という選択肢
段階を決めるとき、扱うデータだけでなく、利用者の範囲も見ます。同じデータでも、自分だけが使うのと、不特定多数に開くのとでは、脅威の数が違うからです。
| 扱うデータ \ 利用者 | 自分だけ | 知人・同僚 | 不特定多数 |
|---|---|---|---|
| 公開してよい情報だけ(教材、用語集) | レベル1 | レベル1 | レベル1 |
| 自分の記録、自分の入力 | レベル2 | レベル2 | レベル2(ログインの守りを厚く) |
| 他人の個人情報、他人の記録 | レベル3(預かった時点で) | レベル3 | レベル3(報告義務の対象になりうる) |
| お金、決済、会社の業務データ | レベル3 | レベル3(社内規程の確認) | レベル3(専門家のレビュー必須) |
表の読み方はひとつです。行(扱うデータ)で段階が決まり、列(利用者の範囲)で守りの厚さが決まります。「他人のデータを扱うが、利用者は同僚3人だけ」でも、レベル3です。預かった時点で、あなたは預かり主だからです。
自分の公開物を、この表に当てはめてみてください。教材サイトはレベル1、ログイン付きのミニ銀行は、他人がアカウントを作れるならレベル3です。学習用であっても、利用者のメールアドレスとパスワードを預かっているからです。
「公開しない」という選択肢
段階が上がるほど、守りに手間がかかります。その手間を払う前に、「そもそも公開する必要があるか」を考える価値があります。選択肢は3つです。
- ローカルだけで動かす。自分のパソコンの中で動かし、インターネットに出さない。自分だけが使う記録アプリなら、これで十分なことが多いです。インターネットから到達できなければ、外からの脅威はほぼ消えます。
- パスワード保護をかける。サイト全体に入口の鍵をかけ、知っている人しか開けないようにします。アプリ自体のログインとは別の、もう一枚の扉です。
- Vercelのデプロイ保護を使う。Vercelには、公開先のURLにアクセスできる人を制限するDeployment Protectionという機能があります。Vercelの公式ドキュメントによれば、Vercelのアカウントでログインした人だけに制限する方式(Vercel Authentication)は全プランで使えます。パスワードで制限する方式(Password Protection)は有料プラン向けです。試作段階のアプリや、同僚にだけ見せたいものには、この機能が向いています。
「作ったものを人に見せたい」という気持ちは自然ですし、それがバイブコーディングの楽しさでもあります。ただ、見せる相手が決まっているなら、全世界に公開する必要はありません。扉を一枚増やすだけで、レベル2やレベル3のアプリに届く脅威の数は大きく減ります。
まとめ
- リスクは、資産(扱うデータ)の大きさで決まる。金庫が空なら、鍵が開いていても被害は小さい。資産・脅威・脆弱性・リスクは、内部統制の言葉にそのまま置き換えられる。
- 見るだけ(レベル1)、入力やログインあり(レベル2)、他人のデータやお金(レベル3)の3段階。他人のデータは、預かった時点でレベル3。利用者の範囲は守りの厚さを決める。
- レベル3では法律と規程が関わる。個人情報の漏えいは、速報おおむね3〜5日、確報30日以内(不正の目的なら60日以内)の報告と本人通知が義務。公開しない、扉を増やす、という選択肢も常にある。
出典
- 個人情報保護委員会「漏えい等の対応とお役立ち資料」(個人情報保護委員会)
- Vercel Docs「Deployment Protection on Vercel」(Vercel, 2026年9月更新)
- Junquan Deng, Zhiyu Fan, Ruijie Meng「Understanding the (In)Security of Vibe-Coded Applications」(arXiv:2606.23130、2026年6月、v4は2026年9月14日)
- OWASP Top 10:2025(日本語版)(OWASP, 2025)