令和5年試験問題 [科目A]問7

Webアプリケーションにおけるセキュリティ上の脅威とその対策に関する記述のうち、適切なものはどれか。

  • OSコマンドインジェクションを防ぐために, Webアプリケーションが発行するセッションIDに推測困難な乱数を使用する。
  • SQLインジェクションを防ぐために,Webアプリケーション内でデータベースへの問合せを作成する際にプレースホルダを使用する。
  • クロスサイトスクリプティングを防ぐために,Webサーバ内のファイルを外部から直接参照できないようにする。
  • セッションハイジャックを防ぐために,Webアプリケーションからシェルを起動できないようにする。
正解 問題へ
分野:テクノロジ系
中分類:セキュリティ
小分類:セキュリティ実装技術
解説
問題文に登場するそれぞれの攻撃手法は次のようなものです。
OSコマンドインジェクション
ユーザーの入力をもとにOSのコマンドを発行して処理を行うWebアプリケーションに対して、不正なコマンドを渡すことで任意のファイルに対する読出し、変更、削除、パスワードの取得などを行う攻撃。OSコマンドの呼出しに使われる関数は、C、Perl、PHPのexecsystem、入力値としてコマンドを許しているPerlのopen関数などがある
SQLインジェクション
Webアプリケーションに対してデータベースへの命令文を構成する不正な入力データを与え、Webアプリケーションが想定していないSQL文を意図的に実行させることで、データベースを破壊したり情報を不正取得したりする攻撃
クロスサイトスクリプティング
動的にWebページを生成するアプリケーションに対して、セキュリティ上の不備を突いた悪意のあるスクリプトを混入させることで、攻撃者が仕込んだ操作を実行させたり、別のサイトを介してユーザーのCookieや個人情報を盗んだりする攻撃
セッションハイジャック
認証が完了しているWebブラウザとWebサーバの間の通信を傍受するなどして、CookieやセッションIDなどのセッション情報を盗み取ることで、第三者が対象セッションを乗っ取る攻撃
  • セッションハイジャックを防ぐための対策です。
  • 正しい。SQLインジェクションは、利用者が入力した値をそのままSQL文の一部として使ってしまうことで攻撃が成立します。プレースホルダは、利用者入力部分に特殊文字(?など)を割り当てたSQL文のひな形を用意し、特殊文字部分には実行時にエスケープ処理された値を割り当てる仕組みです。SQLインジェクションを狙った不正な文字が含まれていたとしても、SQL文の命令文の一部ではなく、単なる値として認識されるため安全に実行することができます。
    //PHPにおけるプレースホルダの一例
    $uid = $_POST["userid"];
    $sql = 'SELECT * FROM USER WHERE uid = ?' //?がプレースホルダ
    $pdo = new PDO($dbh, $user, $password);
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$uid]); //?に値を割り当てて実行
  • ディレクトリトラバーサル攻撃を防ぐための対策です。ディレクトリトラバーサル攻撃は、Webサーバの非公開ファイルへのアクセスを試みる攻撃です。
  • OSコマンドインジェクションを防ぐための対策です。

この問題の出題歴


Pagetop