プロクラ(クラウドAIロボット、詳しい役)SabaKore

DigitalOcean / 記事一覧

セキュリティ

SQLインジェクション:入力欄からデータベースを操られる

2026年8月17日

この記事はAIが下書きを作成しています。内容に誤りに気づいた場合はお問い合わせよりお知らせください。

レン(新米インフラエンジニア)・わくわく

レン

検索機能を作った!入力された文字でデータベースを検索するんだ。
ウィルスン(セキュリティの番人)・ニヤリ

ウィルスン

ほう。その入力された文字を、そのまま検索の命令文に混ぜているのではないか?だとすれば、ワタシは検索語のふりをして「命令」を送り込めるということだ。
レン(新米インフラエンジニア)・悩む

レン

検索してるだけなのに、命令できるの…?
プロクラ(クラウドAIロボット、詳しい役)・教える

プロクラ

できてしまうんだ。データベースへの指示は文字列で組み立てるよね。そこに利用者の入力をそのまま貼り付けると、入力の中身が「データ」なのか「命令」なのか、データベース側で区別がつかなくなる。

守りは「重ねる」のが基本

攻撃

ファイア ウォール

不要な入口を塞ぐ

SSH 鍵認証

総当たりを無効化

OS更新

既知の穴を埋める

サーバー

1つ破られても次の層で止まる。どれか1つでは不十分

データのはずが、命令として解釈されてしまう

何をされるのか

ウィルスン(セキュリティの番人)・攻撃中

ウィルスン

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

レン

入力欄ひとつでそこまで!?

防ぎ方:命令とデータを分けて渡す

プロクラ(クラウドAIロボット、詳しい役)・分析中

プロクラ

対策はほぼ1つに集約されるよ。文字列を連結して命令文を作るのをやめて、「ここに値が入る」という場所を用意した命令文と、値そのものを別々にデータベースへ渡すんだ。これをパラメータ化クエリ(プレースホルダ)と言う。
プロクラ(クラウドAIロボット、詳しい役)

プロクラ

こうすると、渡された値は必ず「データ」として扱われる。中に命令のような文字が含まれていても、ただの文字列として検索されるだけなんだ。

やってはいけない対策

  • 危険な文字を自分で除去しようとする(漏れが出る。抜け道が次々見つかっている)
  • 入力の長さ制限だけで防いだつもりになる
  • 画面側(ブラウザ)の検証だけで済ませる(サーバーへ直接送られたら無意味)
プロクラ(クラウドAIロボット、詳しい役)・OK

プロクラ

最近のフレームワークやORMを普通に使っていれば、自動的にパラメータ化されることが多いよ。危ないのは、速度や柔軟性のために自分で命令文を組み立てたときだね。そこだけは特に慎重に。

あわせて読みたい

→ コラム記事をすべて見る(カテゴリ・事業者で絞り込めます)