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

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

ア.SSLによる通信の暗号化
イ.ファイアウォールによるポートフィルタリング
ウ.プレースホルダを使用したSQL文の組み立て正解
エ.ウイルス対策ソフトの導入

解説

SQLインジェクションは「入力欄に命令文を混ぜ込んでDBを乗っ取る攻撃」。プレースホルダは『データの箱』を先に固定してしまうことで、そもそも命令文として解釈させない構造上の解決策です。

なぜ ウ が正解か

プレースホルダを使うと、SQLの『命令の骨格』を先に確定させてから『データ』を後で安全に埋め込む、という2段階処理になります。つまり入力欄に「' OR '1'='1」と書き込まれても、それは『ただの文字列』としてしか扱われず、命令として実行されません。設計図は改ざんできない、材料だけ差し替える方式――これが根本対策たる所以です。

なぜ ア は間違いか

SSL暗号化は通信の『盗聴』を防ぐもので、攻撃者が入力欄から送り込む悪意ある文字列はちゃんと暗号化して届けてくれます。つまり毒を丁寧にラッピングして配送するだけ。

なぜ イ は間違いか

ファイアウォールのポートフィルタリングは『どの玄関から入るか』を管理するもの。SQLインジェクションは正規の80番ポート(Webの正面玄関)を堂々と通過してくるので、門番はスルーしてしまいます。

なぜ エ は間違いか

ウイルス対策ソフトが検出するのは『悪意あるファイル』。SQLインジェクションはファイルではなく『悪意ある文字列』なので、スキャン対象にすらなりません。文字列は無害に見える顔で入ってきます。

出典: 基本情報技術者試験 令和5年 サンプル問題