メインコンテンツへ
セキュリティ

SQLインジェクションの対策として、有効なものはどれか。

ア.URL をWeb ページに出力するときは、“http://”や“https://”で始まる URL だ けを許可する。
イ.外部からのパラメータでWebサーバ内のファイル名を直接指定しない。
ウ.スタイルシートを任意のWebサイトから取り込めるようにしない。
エ.プレースホルダを使って命令文を組み立てる。正解

解説

SQLインジェクションは「注文伝票に悪意のある追加注文を書き込む攻撃」で、プレースホルダは『記入欄が決まった専用伝票』を使って書き換え不能にする仕組みです。

なぜ エ が正解か

プレースホルダ(`?`や`:name`)を使うと、SQLの『命令の骨格』と『ユーザーのデータ』を別ルートでDBに渡せます。DBは骨格をコンパイルした後にデータを埋め込むので、たとえ入力が `' OR '1'='1` でも『ただの文字列』として扱われ、命令文として実行されません。伝票の品目欄に何を書いても『料理名』としか読まれない、そういう仕掛けです。

なぜ ア は間違いか

URLを `http://` 限定にするのはオープンリダイレクト・XSS対策で、データベースとは無関係。SQLインジェクション犯はURLよりフォームの入力欄が大好きです。

なぜ イ は間違いか

ファイル名を外部から指定させないのはパストラバーサル攻撃の対策。ファイル泥棒は防げますが、DB泥棒には効きません。

なぜ ウ は間違いか

外部スタイルシートを制限するのはCSP・CSSインジェクション対策。画面の見た目は守れますが、裏のデータベースは守れないので、おしゃれな外観のまま中身を盗まれます。

出典: 基本情報技術者試験 令和6年 公開問題