情報セキュリティの基礎
Webアプリケーションが、URLのパラメータで指定されたファイル名を、公開用のフォルダの名前とつなげて読み出して表示している。ファイル名に ../ を含む値を指定されると、公開用のフォルダの外にある設定ファイルなどを読み出されてしまう。この攻撃の名前と対策の組み合わせとして正しいものはどれか。
- Aクロスサイトスクリプティング。出力するときに < や > をエスケープする
- Bディレクトリトラバーサル。ファイルの名前を長くして推測されにくくする
- Cディレクトリトラバーサル。ファイル名を外部から直接指定させない設計にするか、パスを正規化したうえで公開用のフォルダの中にあることを確かめる
答えと解説を見る
正解:C. ディレクトリトラバーサル。ファイル名を外部から直接指定させない設計にするか、パスを正規化したうえで公開用のフォルダの中にあることを確かめる
ディレクトリトラバーサル(パストラバーサル)は、../ のような「1つ上のディレクトリ」を表す記号を使って、アプリケーションが想定したフォルダの外にあるファイルを読み出したり書き換えたりする攻撃です。外部から受け取った値をそのままファイルのパスに使っていることが原因です。対策は、まず、ファイル名を外部から直接指定させず、決められた番号やIDからサーバの側でファイルを選ぶ設計にすることです。外部の値を使う場合は、パスを正規化して(../ などを解決して)、結果が許可したフォルダの中にあるかを確かめます。さらに、アプリケーションを動かすアカウントの権限を最小にして、読めるファイルを限っておけば、万一のときの被害を小さくできます。ファイル名を長くしても、../ でフォルダの外へ出られることは変わりません。
- A. ../ でフォルダの外のファイルを読む攻撃はXSSではなく、エスケープでは防げません。
- B. 名前は正しいですが、ファイル名を長くしても、../ でフォルダの外に出られることは変わりません。
- C. 正しい。外部の値でパスを作らない設計にするか、正規化したパスが許可したフォルダの中にあることを確かめます。