ホーム > 情報処理安全確保支援士試験 > 2016年 秋期
情報処理安全確保支援士試験 2016年 秋期 午前2 問17
SQLインジェクション対策について、Webアプリケーションの実装における対策とWebアプリケーションの実装以外の対策として、ともに適切なものはどれか。

ア:
イ:
ウ:
エ:(正解)
解説
SQLインジェクションは、悪意を持ったユーザーが入力フォームなどを通じて不正なSQL文を実行させる攻撃手法です。Webアプリケーションの安全性を確保するためには、実装面とシステム運用面の両方で対策を講じる必要があります。
Webアプリケーションの実装における対策:プレースホルダを利用する
プレースホルダ(パラメタライズドクエリ)は、SQL文の構造とユーザー入力を分離する方法です。具体的には、SQL文の中に値の部分を「?」などの記号でプレースホルダとして置き、実行時に入力値をバインドします。
例えば、従来の方法で入力値を直接SQL文に埋め込むと、
SELECT * FROM users WHERE id = 'ユーザ入力';
のように、入力値にSQLコードが混入すると危険です。
プレースホルダを使うと、
SELECT * FROM users WHERE id = ?
に対して入力値をバインドし、SQL文の構造が変わらないためSQLインジェクションが防げます。
Webアプリケーションの実装以外の対策:最小権限の原則を適用する
データベースのアクセス権限を必要最小限に制限することも重要です。具体的には、
- Webアプリケーションが使用するデータベースアカウントには、必要な操作(SELECT、INSERT、UPDATEなど)だけを付与する
- 管理者権限やDROPなどの高権限操作は与えない
こうすることで、もしSQLインジェクションが成功しても被害を抑えることが可能です。
他の選択肢の解説
- 「Webアプリケーション中でシェルを起動しない」や「chroot環境でWebサーバを稼働させる」は、システムの侵害範囲を限定する対策ですが、直接SQLインジェクション防止にはつながりません。
- 「セッションIDを乱数で生成する」や「TLSによって通信内容を秘匿する」は、セッションハイジャックや通信の盗聴対策であり、SQLインジェクションとは目的が異なります。
- 「パス名やファイル名をパラメタとして受け取らない」や「重要なファイルを公開領域に置かない」は、ファイル操作やWebサーバ上のディレクトリ構造に関するセキュリティ対策です。
まとめ
SQLインジェクション対策としては、
- Webアプリケーションの実装レベルでは「プレースホルダの利用」
- それ以外の対策として「データベース権限を最小限に絞る」
の組み合わせが最も適切です。
この2点を徹底することで、SQLインジェクションのリスクを大幅に低減できます。