セキュリティ
SQLインジェクション:入力欄からデータベースを操られる
2026年8月17日
この記事はAIが下書きを作成しています。内容に誤りに気づいた場合はお問い合わせよりお知らせください。

レン
検索機能を作った!入力された文字でデータベースを検索するんだ。

ウィルスン
ほう。その入力された文字を、そのまま検索の命令文に混ぜているのではないか?だとすれば、ワタシは検索語のふりをして「命令」を送り込めるということだ。

レン
検索してるだけなのに、命令できるの…?

プロクラ
できてしまうんだ。データベースへの指示は文字列で組み立てるよね。そこに利用者の入力をそのまま貼り付けると、入力の中身が「データ」なのか「命令」なのか、データベース側で区別がつかなくなる。
守りは「重ねる」のが基本
攻撃
ファイア ウォール
不要な入口を塞ぐ
SSH 鍵認証
総当たりを無効化
OS更新
既知の穴を埋める
サーバー
1つ破られても次の層で止まる。どれか1つでは不十分
何をされるのか

ウィルスン
検索結果に、本来見えないはずの全員分のデータを混ぜて表示させる。ログイン画面なら、パスワードを知らずに認証を通す。場合によってはテーブルごと消すこともできる。入力欄1つで、そこまで届くのだよ。

レン
入力欄ひとつでそこまで!?
防ぎ方:命令とデータを分けて渡す

プロクラ
対策はほぼ1つに集約されるよ。文字列を連結して命令文を作るのをやめて、「ここに値が入る」という場所を用意した命令文と、値そのものを別々にデータベースへ渡すんだ。これをパラメータ化クエリ(プレースホルダ)と言う。
プロクラ
こうすると、渡された値は必ず「データ」として扱われる。中に命令のような文字が含まれていても、ただの文字列として検索されるだけなんだ。
やってはいけない対策
- 危険な文字を自分で除去しようとする(漏れが出る。抜け道が次々見つかっている)
- 入力の長さ制限だけで防いだつもりになる
- 画面側(ブラウザ)の検証だけで済ませる(サーバーへ直接送られたら無意味)

プロクラ
最近のフレームワークやORMを普通に使っていれば、自動的にパラメータ化されることが多いよ。危ないのは、速度や柔軟性のために自分で命令文を組み立てたときだね。そこだけは特に慎重に。
あわせて読みたい
- セキュリティDigitalOceanXSS:投稿された内容が他の人のブラウザで動く利用者の投稿をそのまま表示すると何が起きるのかと、エスケープ処理の考え方を解説。
- セキュリティVultrファイルアップロード機能は危険な機能利用者にファイルを置かせる機能に潜むリスクと、実装時に必ず守りたい条件を解説。
- セキュリティVultrログイン機能の落とし穴:セッション管理ログイン状態をどう保持するかの仕組みと、なりすましを許してしまう典型的な実装ミスを解説。
- セキュリティクラウドVPS byGMO信頼していたライブラリが乗っ取られる正規のライブラリに悪意あるコードが混入する手口と、個人開発者にできる備えを解説。