「なぜ入力欄から乗っ取られるの?」
「結局、何を直せば安全なの?」
「入力チェックさえすれば防げる」——この思い込みが、いちばん危ない穴を残します。
SQLインジェクションとは、入力欄に紛れ込ませた文字列がデータベースへの命令として解釈されてしまう攻撃です。危ない文字を弾く発想だけでは、この「解釈のすり替え」を根から止められません。
この記事では、なぜ入力が命令に化けるのかを押さえ、被害の広さを確かめ、対策の誤解を1つずつ正します。最後に「命令とデータを分ける」という根本策と、組織で多層に守る考え方まで示します。SG・基本情報のセキュリティ対策に直結する内容です。
1. なぜ入力欄から命令が紛れ込むのか

Webサイトは、検索ワードやログイン名といったあなたの入力を受け取り、それをもとにデータベースへ問い合わせます。問題になるのは、入力を「ただのデータ」ではなく「命令の一部」として組み立ててしまう作りです。入力と命令が地続きだと、入力に紛れた言葉が命令として動きます。
核心は、入力が「記入内容」ではなく「指示そのもの」として扱われてしまう点です。だからパスワードを知らなくても認証をすり抜けられる、といった深刻な事態が起こります。下の図で、同じ入力欄が安全に働く場合と攻撃に化ける場合の分かれ道を見てください。
2. 起こりうる被害の広さ

対策の重さは、この攻撃で何が起こりうるかを知ると実感できます。代表的な被害は次の3方向です。
- 情報漏えい: 会員情報など、本来見えないデータが取り出される
- データの改ざん・消去: 保存された内容が書き換えられたり、消されたりする
- なりすまし: 認証を回避され、他人として操作されてしまう
個人情報を扱うサイトでこれらが起きると、信用の失墜や復旧の負担など影響が一気に広がります。あなたが利用者の立場でも知っておきたいのは、この攻撃はサイト側の作りの弱さを突く点です。あなたがどれだけ強いパスワードを設定しても、サイト側が入力を安全に扱えていなければ守りきれません。だからこそ、作る側の対策が決定的に重要になります。
3. よくある誤解 — 「入力チェックだけで安全」は本当か

ここが本記事の核心です。「危ない文字を弾く入力チェックさえすれば安全」というのは、正しくありません。入力チェックは価値ある一手ですが、それ単独では守りの土台になりません。
理由は2つあります。ひとつは、弾くべき文字や書き方を人が数え上げる限り、想定から漏れる形が出てくること。もうひとつは、扱うデータによっては危ない文字も正当な入力になりうるため、機械的に弾くと正常な利用まで壊してしまうことです。あなたが「後追いで危険を潰す」発想にとどまるかぎり、抜け道といたちごっこが続きます。
もう1つの誤解が、「表示さえされなければ盗まれない」というものです。攻撃は画面表示だけでなく、応答の時間差や成否の違いからも情報を引き出せます。「見えないから大丈夫」も成り立ちません。誤解を手放し、次章の根本策へ進みましょう。
4. 根本の対策は「命令とデータを分ける」

対策の核心は、入力を命令の組み立てに混ぜず、あくまで「はめ込む値」として渡すことです。命令の骨組みは先に固定し、入力はその決められた場所へ値として差し込む。こうすれば、入力に何が書かれていても命令として解釈されません。この仕組みがプレースホルダ(バインド機構)です。
対策には役割の違いがあります。位置づけを表で押さえてください。
| 対策 | 位置づけ | ねらい |
|---|---|---|
| プレースホルダ(バインド機構) | 根本策 | 命令とデータを最初から分離する |
| 入力値の検証・無害化(エスケープ) | 補助 | 想定外の入力を減らす後押し |
| 権限の最小化 | 被害の抑制 | 万一動いても操作範囲を狭める |
| WAF | 多層防御の一枚 | 入口で疑わしい通信をふるう |
当社の在籍エンジニア(SE歴15年以上)の実務でも、新規開発でわざわざ文字列を継ぎ足して命令を作る場面はまずありません。プレースホルダで組み立てるのが第一で、入力チェックはその上に重ねる補助、という優先順位が現場の共通認識です。
試験でもこの優先順位がそのまま問われます。SGでは「SQLインジェクション対策として適切なものはどれか」という形で出題され、正解はプレースホルダ(バインド機構)の利用です。エスケープや入力チェックは補助で主役ではない、と押さえれば迷いません。
5. 組織で多層に守るという考え方

根本策を入れたうえで、それでも守りは1枚に頼らないのが実務の姿勢です。作り込みのミスはゼロにできないので、複数の層で被害を小さくします。安全な書き方の標準化、公開前のレビューや検査、そしてWAFによる入口での防御。これらを重ねる考え方が、多層防御です。
ここで大切なのは、WAFはあくまで一枚であって、根本策の代わりにはならない点です。入口で疑わしい通信をふるっても、アプリ側で命令とデータが混ざったままなら、いずれ抜け道が見つかります。WAFの守備範囲は、あなたが WAFとは と合わせて読むとくっきりします。
最後に一言。SQLインジェクション対策の根っこは、命令とデータを分けること。この一点を押さえれば、細かな手法の優先順位も試験の選択肢も自然と定まります。
次のステップ
脆弱性対策をどの順で学ぶと効率がよいかは、情報セキュリティマネジメント試験の試験範囲と勉強法ガイド で全体の並びを確かめてから決めると無駄がありません。
そのうえでSG 脆弱性管理の問題集 に進み、対策の選び分けを問う設問で腕試しをしてみてください。