平成24年春期試験問題 午前問43
問43解説へ
Webアプリケーションにおける脅威とそのセキュリティ対策の適切な組合せはどれか。
- OSコマンドインジェクションを防ぐために, Webアプリケーションが発行するセッションIDを推測困難なものにする。
- SQLインジェクションを防ぐために,Webアプリケーション内でデータベースへの問合せを作成する際にバインド機構を使用する。
- クロスサイトスクリプティングを防ぐために,外部から渡す入力データをWebサーバ内のファイル名として直接指定しない。
- セッションハイジャックを防ぐために,Webアプリケーションからシェルを起動できないようにする。
正解 イ問題へ
広告
解説
問題文に登場するそれぞれの攻撃手法は次のようなものです。
- OSコマンドインジェクション
- ユーザーの入力をもとにOSのコマンドを発行して処理を行うWebアプリケーションに対して、不正なコマンドを渡すことで任意のファイルに対する読出し、変更、削除、パスワードの取得などを行う攻撃。OSコマンドの呼出しに使われる関数は、C、Perl、PHPのexecやsystem、入力値としてコマンドを許しているPerlのopen関数などがある
- SQLインジェクション
- Webアプリケーションに対してデータベースへの命令文を構成する不正な入力データを与え、Webアプリケーションが想定していないSQL文を意図的に実行させることで、データベースを破壊したり情報を不正取得したりする攻撃
- クロスサイトスクリプティング
- 動的にWebページを生成するアプリケーションに対して、セキュリティ上の不備を突いた悪意のあるスクリプトを混入させることで、攻撃者が仕込んだ操作を実行させたり、別のサイトを介してユーザーのクッキーや個人情報を盗んだりする攻撃
- セッションハイジャック
- 認証が完了している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コマンドインジェクションを防ぐための対策です。
広告