×
セキュリティ

試験において「SQLインジェクション」は、具体的な動作原理(入力欄に「'(シングルクォーテーション)」や「OR '1'='1'」が入力された場合のSQLの挙動)を問う問題や、その脆弱性を排除するための「根本的対策」を問う問題が非常によく出題されます。

静的プレースホルダ(バインド機構)の利用: SQLインジェクションの最も根本的で効果的な対策は、「静的プレースホルダ」を利用することです。これは、プログラム側でSQL文の骨組み(コマンドの構造)をあらかじめ定義しておき、後からユーザーが入力したパラメータを「単なる値(データ)」として別枠で流し込む技術です。どれほど悪意あるSQL文が入力されても、それは単なるデータとして扱われるため、SQLの構造が変化することは絶対にありません。試験ではこの手法が最優先される対策である点を選択肢から選べるようにしてください。
サニタイジング(エスケープ処理): SQL内で特別な意味を持つ記号(「'」や「\」など)を、単なる文字として扱わせるための無害化処理です。ただし、実装漏れのリスクがあるため、プレースホルダと併用することが推奨されます。
WAF(Web Application Firewall)の導入: Webサーバーの手前で不正なSQLクエリ(シグネチャ)を含むパケットを検知して遮断する対策です。

試験問題では、「SQL文の組み立て」「プレースホルダの利用」「データベースの不正操作」といったフレーズと強く紐付けておくことが得点力に繋がります。

関連する用語

リレーショナルデータベースを操作するための問い合わせ言語「SQL」、Webアプリの脆弱性を突く他の代表的攻撃手法「クロスサイトスクリプティング(XSS)」、Webアプリ層の通信を監視して不正クエリを防ぐ「WAF」などがあります。