サンプル問題 科目A 問36、問37、問38、問39、問40

問36  SQL インジェクション攻撃による被害を防ぐ方法はどれか。 

かなり昔に、SQLインジェクション脆弱性のあるプログラムを作ってしまったことがあります。というより、SQLインジェクション攻撃を想像できませんでした。のどかな時代でした。

 ア  入力された文字が,データベースへの問合せや操作において,特別な意味をもつ文字として解釈されないようにする。 

これがそうです。私は、

 SELECT…FROM…WHERE 属性=[ブラウザから入力した値をそのまま使う]

のようなプログラムを作っていたのでした。

イ  入力に HTML タグが含まれていたら,HTML タグとして解釈されない他の文字列に置き換える。 

これは、入力のサニタイズとして重要ですが、SQLインジェクション対策ではありませんね。

ウ  入力に上位ディレクトリを指定する文字列( ../ )が含まれているときは受け付けない。 

これは、ディレクトリトラバーサル対策として重要ですが、やはりSQLインジェクション対策ではありません。

エ  入力の全体の長さが制限を超えているときは受け付けない。 

これはバッファオーバフロー対策ですね。やはりSQLインジェクション対策ではありません。

問37  電子メールをドメイン A の送信者がドメイン B の宛先に送信するとき,送信者をドメイン A のメールサーバで認証するためのものはどれか。 

そういえば、POP before SMTPとか、ありましたね。

ア  APOP  

これは、メール受信するPOPをもとに認証情報を暗号化したものですね。

送信者を認証するものではないので、違います。

イ  POP3S  

これもメール受信するプロトコルです。POP3TLS(というかPOP3Sの最後のSは、SSLの頭文字のS)で、通信全体を暗号化したものです。

これも送信者を認証するものではないので、違います。

ウ  S/MIME  

これは、送信者で通信内容の暗号化と認証情報の付加を行い、受信者で認証情報の確認と通信内容の復号を行うものです。

送信者の認証も行いますが、それを行うのは受信者であり、ドメインA(送信側)メールサーバではないので、違います。

エ  SMTP-AUTH 

ドメインA(送信側)メールサーバで認証を行います。

これが正解です。

問38  オブジェクト指向プログラムにおいて,データとメソッドを一つにまとめ,オブジェクトの実装の詳細をユーザから見えなくすることを何と呼ぶか。 

ア  インスタンス  

これはオブジェクトの実体であり、違います。

イ  カプセル化  

これが正解です。

ウ  クラスタ化  

クラスタ化は、例えば複数のコンピュータが1台のコンピュータのように振る舞ったり、データ分析で特徴が似たものをまとめたり、分野によっていろいろな使われ方をしている気がします。

しかし、設問のような意味では使われないと思うので、違います。

エ  抽象化 

紛らわしい選択肢が出てきました。オブジェクト指向でいう抽象化は、例えば、右向き三角形の再生ボタンと、正方形の停止ボタンを考えるとわかりやすいのではないかと思います。

これらのボタンはいろいろなソフトや機器に付いていて、それぞれの動きは異なりますが、再生ボタンを押すと再生(あるいは実行)し、停止ボタンを押すと再生や実行を中止して停止する、という振る舞いはソフトや機器の違いを超えて共通しています。抽象化はこういうことだろうと思います。

こう考えると、「データとメソッドを一つにまとめ・・・」というのは、違うように思います。

問39  モジュール結合度が最も弱くなるものはどれか。 

モジュール結合度とは、一転して、懐かしい話になりました。とはいえ、古典的で重要な考え方だと思います。

ただし「結合度が最も弱くなる」というのは、一見すると良くない特徴に見えるかも知れませんが、結合度の観点では弱いほど優れています。

ア  一つのモジュールで,できるだけ多くの機能を実現する。 

これは違います。

モジュール結合度はモジュール間の関係を言います。この選択肢は一つのモジュールの話をしていて、そもそも結合度を言っていません。

また、モジュールの作り方としても良くないのだろうと思います。

イ  二つのモジュール間で必要なデータ項目だけを引数として渡す。 

モジュール間の関係としては、これが望ましい考え方で、正解です。

ウ  他のモジュールとデータ項目を共有するためにグローバルな領域を使用する。 

グローバルな領域を好き勝手に使ってデバッグで大変な思いをする、という経験をした人なら、この選択肢はなるべく避けたいことがわかるはずです。こういう実装をすると結合度が強くなります。

エ  他のモジュールを呼び出すときに,呼び出したモジュールの論理を制御するための引数を渡す。 

他のモジュールがどのような論理で動くか、外部から指示できるということです。場合によりますが、一般的に言って避けた方が良いです。例えると、他の家の中のことに口出しするな、という感じです(人生訓)。この実装も結合度は高くなります。

問40  モジュールの内部構造を考慮することなく,仕様書どおりに機能するかどうかをテストする手法はどれか。  

ア  トップダウンテスト  イ  ブラックボックステスト 

ウ  ボトムアップテスト  エ  ホワイトボックステスト 

これは、イですね。

 

出典:基本情報技術者試験 サンプル問題