SQLインジェクション対策として、IPAが推奨する根本的解決策の説明として、最も適切なものはどれか。
- ①SQL文の組み立てにプレースホルダを用い、後から値を機械的に割り当てるバインド機構を使う
- ②データベースへのアクセスを一切禁止し、Webアプリケーションでデータを扱わないようにする
- ③入力された文字列を、そのまま連結してSQL文を組み立てることを標準の実装方法とする
- ④エラーメッセージにデータベースの詳細な内部情報を表示し、利用者へ丁寧に案内する
答えと解説を見る
SQLインジェクション対策の根本的解決策は、SQL文の雛形にプレースホルダ(変数の場所を示す記号)を置き、後から実際の値を機械的な処理で割り当てるバインド機構(プレースホルダ)を用いることである。これにより、入力された文字列がSQL文の構造そのものを変化させる余地がなくなり、脆弱性の原因を根本的になくすことができる。
他の選択肢が不適切な理由
データベースへのアクセス自体を禁止することは現実的な対策ではなく、多くのWebアプリケーションはデータベースの利用を前提とする。入力文字列をそのまま連結してSQL文を組み立てる実装こそがSQLインジェクションを引き起こす典型的な原因であり、対策とは正反対である。詳細なエラーメッセージの表示は、攻撃者に内部情報を与えてしまう情報漏えいのリスクとなる。