FE Study
FE Study メニュー

学習記録はこのブラウザー内に保存されます。

ホーム問題を解く
ログイン不要・無料で学習

ONE QUESTION, ONE STEP

SQLインジェクションを学ぼう

選んで、確かめて、理解する。焦らず進めましょう。

科目Aセキュリティ標準
QUESTION 30

商品検索で、利用者が入力した商品名をSQL文字列へ直接連結している。入力値がSQL命令として解釈されることを防ぐ実装として、最も直接的なものはどれか。検索対象の表名と列名はプログラム内で固定されている。

出典:本サイト オリジナル教材(2026年)

本サイトで独自に作成。IPAの試験問題からの転載ではありません。

公開日:

解答を一つ選んでください

選択肢を選んで、答え合わせをしましょう。

回答せずに正解・解説を確認する

正解:イ SQLの値をプレースホルダにして、入力をバインド変数として渡す

この表示だけでは、回答数や正答率は変わりません。

解説

パラメータ化したSQLでは、命令の構造を先に定め、利用者の入力を値として別に渡します。これにより、入力中の文字がSQLの構造を変えることを防ぎます。この問題は値の扱いを問うもので、表名や列名を動的に指定する状況とは区別しています。

ア

クライアント側の制限は回避でき、短い入力でも命令として解釈される問題は残ります。

イ

入力をSQLコードと分離し、値として扱う対策です。

ウ

HTTPSは通信経路を保護しますが、受信後にSQLへ連結する問題は残ります。

エ

権限を増やすと侵害時の被害範囲が広がります。入力と命令の分離にもなりません。

関連知識

入力形式の検証とデータベース権限の最小化も追加の防御になります。表名やORDER BYの方向など、値用のプレースホルダにできない部分は固定の候補から選ぶなど、別の制御が必要です。

間違えやすいポイント

HTMLのエスケープとSQLの安全な組立ては別の処理です。画面に安全に表示できてもSQLが安全とは限りません。

覚え方

SQLの命令と入力の値を分ける。

実務での意味

検索、ログイン、帳票抽出など、利用者の入力をSQLへ渡す全経路で同じ方針を適用します。

解説:本サイト編集部によるオリジナル文章

この問題の前後に、セキュリティの基礎知識ガイドで、 仕組み・比較・解き方を確認できます。 手順を確かめたい方は不審なログインを受けて、証拠保全・封じ込め・復旧を組み立てるの実習へ。 この問題の誤りを報告する(GitHub)。問題IDとURLを入力した下書きが開きます。自動投稿は行いません。 投稿は公開されるため、氏名・住所・メールアドレス・学習記録は記入しないでください。 詳しくはお問い合わせ窓口をご覧ください。