[PR] 本ページはプロモーション(広告)が含まれています。

【小学生でもわかる】PHPの穴(脆弱性)って何?ポケモンの色違い8192分の1で例えてみた

ネット・SNSの話題

ポケモンの色違い確率が8192分の1。

ところが、ある特殊な操作をすると、なぜか毎回色違いが出現するようになったら?

そんなことが起きたら、ゲームのプログラムに何か問題があるのかもしれません。

実は、PHPの「穴」や「脆弱性」という言葉をGPTに説明してもらっていたとき、僕はこのポケモンの例えを思いつきました。

今回は、プログラミング初心者の僕がGPTに質問しながら、PHPの穴がなぜできるのかを考えてみます。

※ポケモンの例は、仕組みを説明するための架空の話です。実際に色違いが必ず出る操作があるという意味ではありません。

先にPHPそのものを知りたい方へ:【小学生でもわかる】PHPってそもそも何?WordPressとの関係や役割をやさしく解説

スポンサーリンク

まず、PHPのプログラムってどんなもの?

そもそも僕は、PHPのプログラムがどんなものなのか、よく知りませんでした。

そこでGPTに、ポケモンを使った簡単なPHPコードを書いてもらいました。

<?php
$name = "ピカチュウ";
$level = 50;

echo "ポケモン:" . $name;
echo " レベル:" . $level;
?>

これがPHPのコードです。

実行すると、次のような文字が表示されます。

ポケモン:ピカチュウ レベル:50

最初は英語と記号だらけに見えますが、やっていることは簡単です。

  • $name:ポケモンの名前を入れる
  • $level:レベルを入れる
  • echo:文字を表示する

こうした命令を組み合わせて、Webサイトの裏側でさまざまな処理を行っています。

僕が使っているWordPressもPHPで動いています。

もちろん、実際のWordPressのプログラムは、こんな数行だけではありません。

ポケモンの色違い確率8192分の1をPHPで表現すると?

ここからが本題です。

昔のポケモンでは、通常の色違い出現確率は8192分の1でした。

具体的には、第2世代から第5世代の基本確率です。

この確率を、簡単なPHPコードで再現するとどうなるのでしょうか。

<?php
$number = random_int(1, 8192);

if ($number === 1) {
    echo "色違いが出現!";
} else {
    echo "通常色が出現";
}
?>

GPTが作った、確率の仕組みを説明するためのサンプルコードです。

実際のポケモンゲームの内部プログラムではありません。

意味は次のとおりです。

  1. 1から8192までの数字をランダムに1つ選ぶ
  2. 数字が1なら色違いが出現
  3. それ以外なら通常色が出現

これなら、1回ごとに8192分の1の確率で色違いが出現します。

では、このプログラムに間違いがあったらどうなるのでしょうか。

もし特殊な操作で色違いが100%出現したら?

ここで、僕がGPTにした質問です。

「ポケモンで言ったら、色違いの確率は8192分の1ぐらいだけど、不規則な行動をしたら、なぜかわからないけど全部色違いが出てくる。そんな感じかな?」

GPTからは、バグの例えとしてはかなり近いという説明がありました。

例えば、普通に遊んでいれば8192分の1。

ところが、ある特定の順番で操作すると、なぜか色違いが毎回出現する。

開発者は、そんな動きをするようには作っていません。

でも、プログラムの条件に間違いがあって、想定外の結果になってしまう。

これがバグのイメージです。

ただし、ここで一つ重要なことがあります。

バグと脆弱性は同じではない

GPTによると、バグと脆弱性は必ずしも同じものではありません。

バグは、プログラムの不具合。

脆弱性は、悪用される可能性があるセキュリティ上の弱点。

例えば、色違いが毎回出現するだけなら、通常はゲームの不具合です。

しかし、その不具合を利用して、他人のアカウントに勝手に入れたり、他人のデータを書き換えたりできるなら、セキュリティ上の問題になります。

PHPの穴も、本来できてはいけない操作ができてしまう場合に問題となります。

もちろん、すべての脆弱性が単純なプログラムの書き間違いから生まれるわけではありません。

設計上の問題や設定ミスなどが原因になることもあります。

そもそも、なぜPHPに穴ができるの?

僕が次に疑問に思ったのは、ここです。

世界中の優秀なプログラマーが開発しているのに、なぜ穴ができてしまうのでしょうか。

GPTに聞いてみると、主な理由は次のようなものでした。

  • 人間がコードを書くときに間違える
  • 想定していなかった操作や入力が行われる
  • プログラムが複雑で、すべての動きを確認するのが難しい
  • 新しい機能や修正が、別の不具合を生む
  • サーバーやシステムの設定を間違える

僕は工場で働いています。

工場の設備も、設計した人が想定した使い方と、実際の現場で起こる状況が必ずしも同じとは限りません。

長年使っているうちに、思いがけない不具合や危険が見つかることがあります。

プログラムも少し似ているのかなと思いました。

作った人が想定していなかった条件が重なると、予想外の動作をしてしまうことがあるのです。

PHPの穴をふさぐために、日本のSEたちは何をしている?

では、PHPに脆弱性が見つかったとき、日本のSE(システムエンジニア)たちは何をしているのでしょうか。

もちろん、SEといっても仕事内容はさまざまです。

セキュリティやシステム運用を担当する人たちは、例えば次のような対応を行います。

  1. 脆弱性の情報を確認する
  2. 自分たちのシステムが影響を受けるか調べる
  3. 必要な修正や更新を行う
  4. 更新後に正常に動くかテストする
  5. 不正アクセスの痕跡がないか確認する

ここで僕が気になったのは、穴をふさいだら、それですべて終わりなのかということです。

GPTによると、必ずしもそうではないそうです。

例えば、家の鍵が壊れていたので交換したとします。

でも、鍵を交換する前に泥棒が侵入していたらどうでしょうか。

鍵を交換しただけでは、家の中が安全だとは言い切れません。

そのため、脆弱性の修正と、すでに攻撃を受けていないかの確認は、別々に考える必要があります。

AIを使うハッカーが、また新しい穴を見つけるのでは?

ここで僕は、さらに疑問が出てきました。

「PHPの穴を完璧にふさいでも、ハッカーたちがAIを使って新しい穴を作ったり、見つけたりすることはできるの?」

GPTによると、AIを使って別の弱点を発見することは可能だそうです。

ただし、何もないところから自由自在に脆弱性を作れるという意味ではありません。

AIは大量のプログラムを分析したり、不自然な処理を探したりする作業を支援できます。

ポケモンで例えるなら、普通に遊んでいるだけでは気づかないような、特殊な条件を探す手助けをするイメージです。

もちろん、AIを使ったからといって必ず弱点が見つかるわけではありません。

そして、ここでもう一つ疑問が生まれました。

それなら守る側もAIを使えばいいのでは?

攻撃する側がAIを使うなら、守る側のSEたちもAIを使えばいいのではないでしょうか。

実際、AIは防御にも利用できます。

  • 危険なプログラムを発見する手助け
  • 不審なアクセス記録の分析
  • 修正コードの作成支援
  • セキュリティテストの支援

ただし、AIが作ったコードにも間違いがある可能性があります。

最終的には人間による確認が必要です。

AIは攻撃する側にも、守る側にも利用できる技術なのです。

WordPressを使う僕たちにも関係がある

ここまで調べて、僕自身も他人事ではないと思いました。

僕が運営するシゲキロクは、WordPressを使っています。

WordPress本体だけでなく、テーマやプラグイン、PHPのバージョン、レンタルサーバーの設定など、さまざまなものが関係しています。

PHPだけを更新すれば、すべての問題が解決するわけではありません。

だからこそ、最低限の対策は続けたいと思います。

  • WordPress本体を適切に更新する
  • テーマやプラグインを更新する
  • 不要なプラグインを削除する
  • PHPのバージョンとサポート状況を確認する
  • バックアップを取る
  • ログイン情報を適切に管理する

なお、PHPのバージョン変更は、テーマやプラグインとの互換性を確認してから行う必要があります。

まとめ|ポケモンで例えてもらったら、PHPの穴が少し理解できた

今回、PHPの穴についてGPTにいろいろ質問してみました。

最初は「PHPの脆弱性」と聞いても、何のことかさっぱりわかりませんでした。

でも、ポケモンの色違い確率で例えてもらうと、プログラムが想定外の動きをするという意味が少し理解できました。

通常8192分の1の色違いが、架空の特殊な操作で毎回出現してしまう。

これはバグの例えです。

その弱点を利用して、本来許可されていない操作までできてしまうなら、セキュリティの問題につながります。

そして、脆弱性は一度修正すれば、世の中からすべてなくなるというものでもありません。

別の場所に弱点が見つかることもあります。

だからこそ、開発者やSE、セキュリティ担当者たちは、日々プログラムの安全性を確認し、必要な修正を続けているのですね。

僕はプログラミングの専門家ではありません。

でも、わからないことをGPTに聞きながら、一つずつ理解していくことはできます。

そして、今回のように、自分が知っているポケモンに例えると、難しい話も少し身近になります。

この記事が、僕と同じようにPHPのことをよく知らなかった人の参考になればうれしいです。

あわせて読みたい|そもそもPHPって何?

今回はPHPの「穴」について考えましたが、そもそもPHPが何をするプログラミング言語なのか気になる人もいると思います。

以前の記事では、PHPとHTMLの違いや、WordPressがPHPを使って何をしているのか、PHPの更新は必要なのかなど、基本的な仕組みを初心者向けに説明しています。

【小学生でもわかる】PHPってそもそも何?WordPressを動かす仕組みをやさしく解説

PHPの穴を知った後に読むと、WordPressの裏側がさらに理解しやすくなると思います。

参考資料

※本文のPHPコードおよび色違い確率の例は、GPTが説明用に作成したものです。実際のポケモンの内部プログラムや、特定のPHP脆弱性を再現したものではありません。

コメント

タイトルとURLをコピーしました