情報セキュリティスペシャリスト試験の過去問から、エスケープ処理とプレースホルダ、バインド機構についてまとめてみました。午前2試験でよく出題されます。
エスケープ処理
エスケープ処理とは、対象となる処理系で特別な意味を持つ文字列を別の文字列に置き換えて無害化する処理を言います。
HTTPやJavaScript(試験ではECMA Scriptの名前で出てきます)で行われます。
クロスサイトスクリプティング攻撃に対して有効です。
静的プレースホルダ
静的プレースホルダとは、SQL文を書くときの手法の一つです。
ユーザーが入力するデータの挿入される場所をあらかじめ確保し、それ以外の部分の構文解析をあらかじめ行っておきます。
これにより、ユーザーがSQL文をWEBフォームなどに入力してもデータベースのSQLは反応しなくなります。この処理をデータベースで行うため原理上不正なデータの挿入が起こりえません。
SQLインジェクション攻撃に対して有効です。
プリペアドステートメントとも呼ばれます。
動的プレースホルダ
動的プレースホルダとは、SQL文を書くときの手法の一つです。
ユーザーが入力するデータの挿入される場所をあらかじめ確保し、それ以外の部分の構文解析をあらかじめ行っておきます。
これにより、ユーザーがSQL文をWEBフォームなどに入力してもデータベースのSQLは反応しなくなります。この処理をWEBアプリケーションのライブラリで行います。そのため、不正データが挿入される可能性を完全には排除できません。
SQLインジェクション攻撃に対して有効です。
バインド機構
バインド機構とは、静的プレースホルダを行うためのデータベースの機能の名前です。
確保された箇所にデータを入力することを「バインド」と呼び、それを行うための機能を「バインド機構」と呼びます。
安全性の順位
安全性の順位は上記のとおりです。エスケープ処理はかかわる処理系すべてで行う必要があることに注意してください。
(過去にJAVA ScriptとHTMLの片方でしか処理をしていない、というひっかけ問題がありました)
出題例
質問
SQLインジェクション対策について,Webアプリケーションの実装における対策とWebアプリケーションの実装以外の対策の組合せとして,ともに適切なものはどれか。
Webアプリケーションにおける対策 | Webアプリケーションの実装以外の対策 | |
---|---|---|
ア | Webアプリケーション内でシェルを起動しない。 | chroot環境でWebサーバを実行する。 |
イ | セッションIDを複雑なものにする。 | SSLによって通信内容を秘匿する。 |
ウ | バインド機構を利用する。 | データベースのアカウントの持つデータベースのアクセス権限を必要最小限にする。 |
エ | パス名やファイル名をパラメタとして受け取らないようにする。 | 重要なファイルを公開領域に置かない。 |
解法
- ア:OSコマンドインジェクションの対策
- イ:セッションハイジャックの対策
- ウ:SQLインジェクションの対策
- エ:ディレクトリトラバーサル
- 知識問題です。知ってさえいれば解答できます。
解答
- ウ