動くものを作れるようになったら、次に意識したいのがセキュリティです。代表的な攻撃の仕組みを知っておくだけで、危険なコードを書くリスクは大きく減ります。まず押さえたい3つの脅威と対策を解説します。
脆弱性の多くは「知らずに危険な書き方をしてしまう」ことが原因です。攻撃の仕組みを一度知っておくだけで、無防備なコードを避けられます。ここでは特に頻出の3つを紹介します。
ユーザーの入力をそのままページに表示すると、悪意ある<script>を埋め込まれ、他の利用者のブラウザで実行されてしまう攻撃です。
ユーザー入力を表示するときは必ずエスケープ(<→<等に変換)します。多くのテンプレートエンジンは標準でエスケープしてくれるので、「生のまま出力」する機能をむやみに使わないことが基本です。
入力値をそのままSQL文に連結すると、DBを不正操作される攻撃です。
// ❌ 危険:入力を直接連結
"SELECT * FROM users WHERE name = '" + input + "'"
プレースホルダ(プリペアドステートメント)を使い、値を安全に埋め込みます。
// ✅ 安全(例: PHP PDO)
$stmt = $pdo->prepare("SELECT * FROM users WHERE name = ?");
$stmt->execute([$input]);
ログイン中のユーザーに、意図しないリクエスト(退会・送金など)を勝手に送らせる攻撃です。
フォームにCSRFトークンという秘密の合言葉を仕込み、正規の画面から送られたリクエストかを検証します。主要フレームワークは標準機能を備えています。
セキュリティは「特別な人がやること」ではなく、すべての開発者の基礎教養です。まずは XSS・SQLインジェクション・CSRF の3つと「入力を信用しない」原則を頭に入れることから始めましょう。