はじめに
概要
AIに「ログインシステムを作って」と頼めば、数秒でコードが出てくる時代になりました。
しかし、そのコードが本当に安全かどうかを判断できる人は多くありません。
- SQLインジェクション
- XSS
- セッションハイジャック
- CSRF
こうした脆弱性を理解しないままAIのコードを使うと、気づかないうちに危険なシステムを公開してしまう可能性があります。
本教材は、PHPとMySQLを使ったログインシステム開発を題材にしながら、Web開発者として一生役立つ「Webセキュリティの基礎」と「自力で問題を解決するデバッグ力」を身につけることを目的としています。
単なるコピペ教材ではありません。
コードを書くだけではなく、
「なぜその対策が必要なのか」
「なぜその脆弱性が発生するのか」
「なぜフレームワークはその設計になっているのか」
を徹底的に理解していきます。
教材の学習を終える頃には、ログインシステムの裏側で起きている処理を頭の中で説明できるようになり、AIが生成したコードの安全性を自分で判断できるようになるでしょう。
この教材で身につくこと
- HTTP、Cookie、Sessionによる状態管理の仕組み
- PHPとMySQLを使った認証処理の実装方法
- PDOを利用した安全なデータベースアクセス
- パスワードハッシュ化の考え方と実装方法
- SQLインジェクションの仕組みと対策
- XSSの仕組みと対策
- セッション固定攻撃への対策
- CSRFの基本原理と安全な設計思想
- エラーメッセージの読み方とデバッグスキル
- LaravelやWordPressなどの認証機能の理解につながる基礎知識
この教材が向いている人
- PHPを学び始めた初心者
- Web開発の基礎を体系的に理解したい人
- AIにコードを書かせているが安全性に不安がある人
- LaravelやWordPressの認証機能を理解したい人
- 将来的にWebエンジニアを目指している人
- セキュリティを学びたいが何から始めればいいかわからない人
この教材で作るもの
本教材では最終的に以下の機能を備えたログインシステムを完成させます。
- ログイン
- ログアウト
- セッション管理
- パスワードハッシュ化
- SQLインジェクション対策
- XSS対策
- セッション固定攻撃対策
- CSRFを考慮した安全な設計
ただし、本教材のゴールはログインシステムを完成させることではありません。
本当のゴールは、
「安全なコードと危険なコードを見分けられるようになること」
です。
AI時代に価値を持つのは、コードを書く力だけではありません。
コードを理解し、評価し、改善できる力です。
この教材では、そのための土台となる知識と実践力を身につけていきます。
第0章:【体験編】まずは動かす!動くけれど穴だらけの初期コード
プログラミングの世界へようこそ!
これから皆さんは、Webアプリケーションの心臓部とも言える「ログイン機能」の開発に挑戦します。
「セキュリティ」や「サイバー攻撃」と聞くと、難しそうな数式やハッカーの黒い画面を想像して身構えてしまうかもしれません。
しかし、安心してください。
まずは難しい理屈をすべて抜きにして、「プログラムが自分の手で動く感動」を体験することから始めましょう。
今回は、生成AIにお願いすれば1秒で出てくるような、極めてシンプルで「とにかく動く」ログイン機能を用意しました。
1 まずは動かしてみよう!初期コード
以下のコードを chapter0.php という名前で保存し、PHPが動作する環境(ローカルサーバーなど)で実行してみてください。
<?php
// chapter0.php
// ※これは体験用の「極めて危険なコード」です。本番環境では絶対に mySQL 等に接続しないでください。
$message = '';
// 本来はデータベースから取得しますが、まずは体験のために固定値で定義します
$valid_user = 'taro';
$valid_password = 'abcd1234';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$username = $_POST['username'] ?? '';
$password = $_POST['password'] ?? '';
// 【超危険】単純な文字列比較によるログインチェック
if ($username === $valid_user && $password === $valid_password) {
$message = "ログイン成功!ようこそ、" . $username . "さん!";
} else {
$message = "ユーザー名またはパスワードが違います。";
}
}
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>爆速ログイン画面(体験版)</title>
</head>
<body>
<h1>ログインシステム</h1>
<?php if ($message): ?>
<p style="color: blue; font-weight: bold;"><?php echo $message; ?></p>
<?php endif; ?>
<form action="" method="POST">
<div>
<label for="username">ユーザー名:</label>
<input type="text" id="username" name="username" required>
</div>
<br>
<div>
<label for="password">パスワード:</label>
<input type="password" id="password" name="password" required>
</div>
<br>
<button type="submit">ログイン</button>
</form>
</body>
</html>
💡 体験ステップ
- ブラウザでこの画面を開きます。
- ユーザー名に
admin、パスワードにpassword123と入力して「ログイン」ボタンを押してみましょう。 - 画面に「ログイン成功!ようこそ、adminさん!」と表示されるはずです。
どうでしょうか?「自分で書いた(コピペした)プログラムが、入力された値を受け取って正誤を判定し、画面を切り替える」。
この動いた瞬間のワクワク感こそが、開発の醍醐味です。
2 🚨 動く感動、そして絶望の入り口
無事にログインできて感動している皆さんに、ここで衝撃の事実をお伝えしなければなりません。
❌ 「今動かしたこのコード、実はハッカーにとって侵入し放題の『超危険なコード』です」
「えっ?ちゃんと正しいIDとパスワードのときだけ『成功』って出ているし、間違えたらエラーになるよ?何が危険なの?」と思うかもしれません。
実は、このコードでデータベースに接続した場合、現代のWebサイトが一瞬で崩壊するような致命的な弱点(脆弱性)がいくつも潜んでいます。
もし、これと同じ書き方で本番のWebサイトを公開してしまったら、以下のような大惨事が引き起こされます。
- 裏口から侵入される: パスワードを知らないハッカーが、入力欄に「ある特殊な文字列」を入れるだけで、あなたの管理画面にログインできてしまいます。
- パスワードが丸見え: データベースがハッキングされたとき、ユーザーのパスワードが暗号化されていないため、顧客全員のパスワードが世界中に流出します。
- 画面を乗っ取られる: 入力欄に悪いプログラム(JavaScript)を仕込まれ、このページにアクセスした他のユーザーの個人情報が盗まれます。
なぜこんなことが起きるのか?
それは、生成AI(Geminiなど)に「ログイン機能を作って」とだけ頼むと、高確率でこれと同じような「動くだけの危険なコード」を出力するからです。
AIは「動くもの」を作るのは得意ですが、あなたが明確に指示をしない限り、セキュリティの対策を省略しがちです。
3 これから身につける「最強の武器」
これからの時代、プログラミングのコードを書く作業そのものは、AIがいくらでも代行してくれます。それこそ「爆速」で。
だからこそ、これからのWebエンジニアに本当に求められるのは、「AIが書いたコードをジッと見つめ、『あ、ここに対策が抜けているな』と見抜き、自分の手で修正(監査)できる力」です。
この講座を最後まで終えたとき、あなたのアタマには「セキュリティ監査の目」が備わっています。
AIを最高の部下として使いこなし、ハッカーを寄せ付けない頑強なシステムを組み立てられる「一歩先のエンジニア」を目指して、次の章からWebの裏側の仕組みを解き明かしていきましょう!
ここまで読んで興味を持った方へ
今回の体験版では、「動くけれど危険なログインシステム」を触っていただきました。ただ、本当に重要なのはここからです。
多くの初学者は 「ログインフォームにIDとパスワードを入力すると認証される」 という表面的な理解で止まっています。
しかし実際には、
- ブラウザは何を送信しているのか
- HTTPとは何なのか
- Cookieは何のために存在するのか
- Sessionはどこで管理されているのか
- なぜログイン状態を維持できるのか
といった仕組みが裏側で動いています。
本教材では、この「ログインの裏側」を解説した章を無料公開しています。
ログインシステムをブラックボックスとして使うのではなく「なぜ動くのか」を理解したい方は、まず無料公開部分だけでも読んでみてください。
この章を理解するだけでも、LaravelやWordPressの認証機能を見る目が大きく変わるはずです。
▼Zenn Bookはこちら
https://zenn.dev/uteee/books/4e8f99933f95dd