セキュリティ/攻撃/Lesson 02
Web攻撃 — OWASP Top 10 + XSS · CSRF · SQLインジェクション
45分·theory
Web攻撃 — OWASP Top 10 + XSS · CSRF · SQLインジェクション
🎯 このlessonを読み終えたら
このlessonを最後まで読み終えると、以下の3つを自信を持って実践できます。
- ▸✅ OWASP Top 10のTop 5を暗記する
- ▸✅ SQLインジェクション · XSS · CSRFの防御コードパターン
- ▸✅ PreparedStatement / DOMPurify / SameSiteの活用
学習目標をチェックリストとして手元に置き、すべて答えられるようになったらlessonを閉じてください。
OWASP Top 10 (2021) — 最も危険なWebの脆弱性
一言で言うと: OWASP = 非営利のセキュリティ団体。Top 10は最も一般的なWebの脆弱性カテゴリ一覧。面接の定番テーマ。
> 💡 A01 · A03 · A07が最も頻繁に発生します。入社後の最初のコードレビューで100%遭遇します。
XSS · CSRF · SQLインジェクション — 3大よくある攻撃
XSS (クロスサイトスクリプティング) — 悪意のあるスクリプトの注入
XSSの4つの防御策:
1. 出力のエスケープ — < → <(React · Vueがデフォルトで処理)
2. CSP (Content-Security-Policy) — 信頼できるスクリプトのみ許可
3. httpOnlyクッキー — JSからセッショントークンにアクセス不可
4. innerHTMLの代わりにtextContentを使用
CSRF (クロスサイトリクエストフォージェリ) — 別サイトが自分の認証情報でリクエストを実行
- ▸例:
evil.comのページに<img src="bank.com/transfer?to=hacker&amt=999">を埋め込む - ▸ブラウザが自動的にbank.comのクッキーを添付 → 送金が実行される
CSRFの防御策:
- ▸CSRFトークン — フォームにランダムなトークンを埋め込み、サーバーが検証。Spring Securityがデフォルトで提供
- ▸SameSiteクッキー —
SameSite=Lax/Strict— 外部ドメインからクッキーを送信しない - ▸Origin/Refererの検証 — リクエストの送信元を確認
SQLインジェクション — ユーザー入力がSQLの一部になる
- ▸❌ 脆弱:
"SELECT * FROM users WHERE id='" + input + "'" - ▸入力:
1' OR '1'='1→ 全行が返される - ▸入力:
1'; DROP TABLE users; --→ テーブルが削除される
防御策:
- ▸パラメータ化クエリ (Prepared Statement):
- ▸ORMの使用 (SQLAlchemy · Hibernate · Prisma) — 自動エスケープ
- ▸入力のホワイトリスト — 数値やUUIDなど明確なフォーマットのみ受け付ける
> ⚠️ 「'をエスケープすれば安全」は誤った通念です。常にパラメータ化クエリを使用してください。
🤖 AIにこう依頼してみましょう
このlessonの概念を理解すれば、AIに具体的に指示できるようになります。漠然とした「直して」ではなく、語彙を持った依頼をすること — それがトークン節約の出発点です。
- ▸「このコードのSQLインジェクション / XSS / CSRFの脆弱性を確認して」
- ▸「この入力値の検証をホワイトリスト方式で強化して」
なぜこれがトークンを減らすのか
概念を知らないと、AIの回答を受け取っても「それって何ですか?」と再度尋ねなければなりません。その「再質問」がトークンを消費します。概念を一度学んでおけば、会話が一度で完結します。
先に読むとよい概念: セキュリティ
次のおすすめ: 暗号化 + 認証 — ハッシュ・HTTPS・セッション・JWT