【学問のすすめ】中世ヨーロッパ写字生のように黙って静かに手を動かすブログ

語学系、IT系の「やってみた」ことを備忘録を兼ねて書いていきます。資格試験の話が多いです。

【SC試験対策】エスケープ処理とプレースホルダについてまとめてみた


f:id:pesia_one:20160411002630p:plain:W300

情報セキュリティスペシャリスト試験の過去問から、エスケープ処理プレースホルダバインド機構についてまとめてみました。午前2試験でよく出題されます。

エスケープ処理

エスケープ処理とは、対象となる処理系で特別な意味を持つ文字列を別の文字列に置き換えて無害化する処理を言います。
HTTPやJavaScript(試験ではECMA Scriptの名前で出てきます)で行われます。
クロスサイトスクリプティング攻撃に対して有効です。

静的プレースホルダ

静的プレースホルダとは、SQL文を書くときの手法の一つです。
ユーザーが入力するデータの挿入される場所をあらかじめ確保し、それ以外の部分の構文解析をあらかじめ行っておきます。
これにより、ユーザーがSQL文をWEBフォームなどに入力してもデータベースのSQLは反応しなくなります。この処理をデータベースで行うため原理上不正なデータの挿入が起こりえません
SQLインジェクション攻撃に対して有効です。
プリペアドステートメントとも呼ばれます。

動的プレースホルダ

動的プレースホルダとは、SQL文を書くときの手法の一つです。
ユーザーが入力するデータの挿入される場所をあらかじめ確保し、それ以外の部分の構文解析をあらかじめ行っておきます。
これにより、ユーザーがSQL文をWEBフォームなどに入力してもデータベースのSQLは反応しなくなります。この処理をWEBアプリケーションのライブラリで行います。そのため、不正データが挿入される可能性を完全には排除できません。
SQLインジェクション攻撃に対して有効です。

バインド機構

バインド機構とは、静的プレースホルダを行うためのデータベースの機能の名前です。
確保された箇所にデータを入力することを「バインド」と呼び、それを行うための機能を「バインド機構」と呼びます。

安全性の順位

  1. 静的プレースホルダ (原理的にあり得ない)
  2. 動的プレースホルダ
  3. エスケープ処理

安全性の順位は上記のとおりです。エスケープ処理はかかわる処理系すべてで行う必要があることに注意してください。
(過去にJAVA ScriptとHTMLの片方でしか処理をしていない、というひっかけ問題がありました)


出題例

f:id:pesia_one:20160410012918p:plain:W150
(平成24年度春季試験 午前2/問16)

質問

SQLインジェクション対策について,Webアプリケーションの実装における対策とWebアプリケーションの実装以外の対策の組合せとして,ともに適切なものはどれか。

Webアプリケーションにおける対策 Webアプリケーションの実装以外の対策
Webアプリケーション内でシェルを起動しない。 chroot環境でWebサーバを実行する。
セッションIDを複雑なものにする。 SSLによって通信内容を秘匿する。
バインド機構を利用する。 データベースのアカウントの持つデータベースのアクセス権限を必要最小限にする。
パス名やファイル名をパラメタとして受け取らないようにする。 重要なファイルを公開領域に置かない。

解法

解答

備考

エスケープ処理とプレースホルダの違いを覚えていなかったのでまとめました。
実務上では、エスケープ処理は必要不可欠、プレースホルダはシステム上設定が不可能な場合もあるため、できる場合にのみ行うようです。