パソコン教室・IT資格情報処理技術者試験対策講座応用情報技術者試験レッスンノート 体験レッスンでは、以下について取り...

体験レッスンでは、以下について取り...

応用情報技術者試験対策講座のレッスンノート

レッスンノートって?レッスンノートって?

体験レッスンでは、以下について取り上げました。

○ SQLインジェクション攻撃の対策について
○ 2014年度秋期 午前問3の解説

以下に内容を記します。

(1) SQLインジェクション攻撃の対策について

ご質問の中心は、「何故シングルクォーテーション(')を2つ並べることが、攻撃の対策になるのか」ということでした。

この件に関してはレッスン後に追加調査しましたので、以下にその結果を記します。

まず、上記の対策は「パラメータが文字列リテラル」の場合のものです。

リテラルには数値リテラルと文字列リテラルとが存在し、文字列リテラルの場合は開始と終了をシングルクォーテーションでくくると定められています(数値リテラルの場合は他の対策があるようですが、ここでは割愛します)。

さて、ここであるサイトへのログイン時に名前とパスワードを入力させる場合を考えてみます。

この場合、たとえば以下の手続きを記述します。

SELECT * FROM XXXXX WHERE USERID='$name' AND PASSWD='$pwd'

ここでは名前が$name、パスワードが$pwdで渡されることが想定されています。

しかし、ここで$pwdとして例えば「' OR 'X' = 'X」が入力されたときに問題となります。
この入力をそのまま受け付けた場合、PASSWDの部分は$pwdの前のシングルクォーテーションと組み合わされて、「'' OR 'X' = 'X'」と解釈されてしまいます。

つまりOR以降に記されている部分が常に真の状態となるため、いかなるパスワードが設定されてようがフリーパスの状態になってしまうわけです。

そこで、対策としては'X'='X'という文字列リテラル同士の比較にさせないようにすることが考えられ、その一環として「入力された文字列のうち、シングルクォーテーション1つの部分は強制的に2つに変換するエスケープ処理を内部的に入れる」方式が採用されたわけです。

こうすれば、「' OR 'X' = 'X」という文字列が$pwdに対して入力されたとしても、この中の4箇所のシングルクォーテーションが全て2個に変換されるので、PASSWDの部分は「''' OR ''X''=''X'''」となります。

こうすれば、フリーパスの根源となっていた「'X'='X'」という文字列リテラルの比較をせずにすむというわけです。


○ 2014年度秋期 午前問3の解説

この問題では、M/M/1の待ち行列モデルが採用された場合に、平均待ち時間と平均処理時間から処理装置の利用率を求めさせています。

平均待ち時間Twは、利用率をa、平均処理時間をTsとした場合以下の公式で表現できます。

 Tw = (1-a)/a × Ts

本問題では、平均処理時間がT秒のもとで右辺の値がT秒以上となる場合のaを求めればOKです。

a / (1-a) × T > T

両辺をTで割り、さらに両辺に(1-a)を掛けると、以下のように置き換えられます。

a > 1 - a

両辺にaを加えても結果は変わりません。a を加えると、

2a > 1 => a > 1/2

となります。パーセントで答えを求めさせていますので、正解はイの「50」となります。
このレッスンノートを書いたコーチ

富士通でソフト開発を13年担当。あなたの合格を戦略的にアシストします。

応用情報処理技術者試験対策セミナー
源田雄一 (応用情報技術者試験)

戸塚・立川・新横浜・町田・関内・石川町・相模大野・鶴間・大和・二俣川・希望ヶ丘・三ツ...

レッスンノート ページ先頭へ

応用情報技術者試験情報

サイタの応用情報技術者試験講師がブログを通して、応用情報技術者試験情報を発信。更新情報のチェックはこちらから!