# Webの中のセキュリティ — コードを書くときに守ること

> レベル: 初級 ／ 対象: 大人
> 出典: Kotowary — https://kotowary.com/learn/units/web-app-security?level=beginner&audience=adult
認証・認可でログインまわりを守れても、Webアプリには**開発中に気をつける穴**がいくつもあります。その入口をまとめます。

## 根っこの考え方

すべての土台は「**外から来たものは信用しない**」。ブラウザから届く値も、URLのパラメータも、疑ってかかる。これを忘れると、次のような穴になります。

## 守りの主なポイント

1. **入力の検証** — 外から来た値を、そのまま使わず確かめる（型・範囲・形式）
2. **XSS対策** — 出力を安全にして、他人のブラウザで悪いスクリプトを動かされないように
3. **CSRF対策** — ログイン中を悪用した「勝手な操作」を防ぐ
4. **SQLインジェクション対策** — 入力を通じてDBに不正な命令を送らせない
5. **秘密情報の管理** — 鍵・パスワードをコードに直書きせず、隔離する

攻撃は、アプリと外の世界が触れ合う「**境界**」で起きます。だから守りも、境界ごとに置きます。

::diagram{name="io-boundary"}

それぞれの詳しい手口と防ぎ方は、この下の各テーマで扱います。

## 大事な姿勢

- **多層で守る** — 1つの対策に頼らず、入力検証・出力エスケープ・権限確認を重ねる
- **サーバで最終確認** — フロントのチェックは親切機能。本当の守りはサーバ側
- **既定は安全側** — 迷ったら「拒否・非公開」から始める

## ⚠️ 定番の事故

- **入力をそのまま画面に出す** → XSS
- **入力をそのままDB命令に混ぜる** → SQLインジェクション
- **鍵をリポジトリに置く** → 秘密情報の漏洩
- **公開設定のミス** → 見えてはいけないデータの露出
