LESSON 15分

セキュリティの重要性

ストーリー

金曜日の夕方、あなたのチームに緊急の通知が飛んできた。

セキュリティチームのリーダー、高橋さんが険しい表情で言う。

「全員聞いてくれ。監視システムが不審なアクセスパターンを検出した。 データベースに対して、通常ではありえないクエリが実行されている形跡がある」

「SQLインジェクション......ですか?」あなたが聞くと、

高橋さんは頷いた。

「その可能性が高い。まだ被害は確認されていないが、放置すれば顧客情報が漏洩するかもしれない。 今から全員でシステムの脆弱性を洗い出して、防御を固める。これが今月の最優先ミッションだ」

あなたは身を引き締めた。セキュリティは他人事ではない。自分が書いたコードにも脆弱性があるかもしれない。


なぜセキュリティが重要なのか

データ漏洩の現実

セキュリティインシデントは毎年増加し続けています。その被害は想像以上に深刻です。

影響具体例
金銭的損失1件あたりの情報漏洩の平均コストは約4億円(IBM調査)
信頼の喪失顧客離れ、取引停止、株価下落
法的責任個人情報保護法違反、GDPR罰金(売上高の4%)
事業停止システム停止、復旧作業、業務の中断

開発者の責任

セキュリティは「セキュリティチームの仕事」ではありません。コードを書く全てのエンジニアに責任があります。

攻撃者が狙うのは「最も弱い部分」

┌──────────────────────────────────────┐
│            アプリケーション            │
│  ┌──────┐  ┌──────┐  ┌──────┐       │
│  │ログイン│  │検索機能│  │管理画面│       │
│  │  安全  │  │ 脆弱 │  │  安全  │       │
│  └──────┘  └──┬───┘  └──────┘       │
│               │                      │
│          ここが狙われる                 │
└──────────────────────────────────────┘

たった1箇所の脆弱性が、システム全体を危険にさらします。


主要な脅威の概要

Webアプリケーションに対する主な攻撃を概観しておきましょう。詳細は次のセクション以降で学びます。

1. インジェクション攻撃

アプリケーションに悪意のあるコードを「注入」する攻撃です。

sql
-- 正常なクエリ
SELECT * FROM users WHERE name = '田中';

-- 攻撃者が入力を操作
SELECT * FROM users WHERE name = '' OR 1=1 --';
-- すべてのユーザー情報が漏洩する

2. 認証の突破

パスワードの使い回し、弱いパスワードポリシー、セッション管理の不備を突く攻撃です。

3. クロスサイトスクリプティング(XSS)

Webページに悪意のあるスクリプトを埋め込み、他のユーザーのブラウザで実行させる攻撃です。

4. アクセス制御の不備

認可チェックの漏れにより、本来アクセスできないデータや機能にアクセスされる攻撃です。


セキュリティの基本原則

多層防御(Defense in Depth)

1つの防御が突破されても、次の防御で食い止めるという考え方です。

┌─────────────────────────────────┐
│       ファイアウォール              │
│  ┌───────────────────────────┐  │
│  │      WAF(Web Application) │  │
│  │  ┌─────────────────────┐  │  │
│  │  │    入力バリデーション    │  │  │
│  │  │  ┌───────────────┐  │  │  │
│  │  │  │パラメータ化クエリ │  │  │  │
│  │  │  │  ┌─────────┐  │  │  │  │
│  │  │  │  │最小権限DB │  │  │  │  │
│  │  │  │  └─────────┘  │  │  │  │
│  │  │  └───────────────┘  │  │  │
│  │  └─────────────────────┘  │  │
│  └───────────────────────────┘  │
└─────────────────────────────────┘

最小権限の原則

必要最低限の権限のみを付与する原則です。

typescript
// 悪い例: 管理者権限でデータベースに接続
const db = connect({ user: 'root', password: 'admin123' });

// 良い例: 必要最低限の権限のみを持つユーザーで接続
const db = connect({ user: 'app_readonly', password: process.env.DB_PASSWORD });

ゼロトラスト

「何も信頼しない」という前提で設計する考え方です。

  • ユーザーの入力を信頼しない
  • クライアントからのデータを信頼しない
  • 内部ネットワークも信頼しない

このミッションの全体像

6つのステップ(合計20時間)

Stepテーマ時間主なスキル
1攻撃の仕組みを理解しよう3hOWASP Top 10、攻撃手法
2脆弱なコードを特定しよう4hコードレビュー、脆弱性スキャン
3セキュアな実装を学ぼう4hパラメータ化クエリ、サニタイズ
4OAuth/JWTを実装しよう5h認証・認可、JWT、OAuth 2.0
5セキュリティツールを導入しよう3hSAST/DAST、CI/CD統合
6知識を確認しよう1h総合演習 + 卒業クイズ

まとめ

ポイント内容
セキュリティの重要性金銭・信頼・法的リスクが伴う
開発者の責任セキュリティはコードを書く全員の責任
基本原則多層防御、最小権限、ゼロトラスト
ミッション脆弱性を理解し、セキュアなコードで防御を固める

チェックリスト

  • セキュリティインシデントの影響を理解した
  • 多層防御の考え方を理解した
  • 今月のミッションの全体像を把握した

次のステップへ

次のセクションでは、Webアプリケーションの脆弱性をまとめた業界標準「OWASP Top 10」を学びます。 これを知ることで、何を防ぐべきか明確になります。

セキュリティの戦いは、敵を知ることから始まります。


推定読了時間: 15分