- - PR -
MapPath("../../CM/CM001.txt")
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-05-20 23:04
ASP.NET2.0からは..で上の階層をMapPathできなくなったみたいなんですけど
どうしたらよいでしょうか。 自分で調べた ---------------- 入力された仮想パスを、MapPath を使用して物理パスにマップする場合は、これをオーバーロードして、bool パラメータを受け取り、アプリケーションを越えるようなマッピングを避けるようにした Request.MapPath を使用します。 以下にこの技法のコード サンプルを示します。 try { string mappedPath = Request.MapPath( inputPath.Text, Request.ApplicationPath, false); } catch (HttpException) { // アプリケーションを越えるマッピングが試みられた場合 } 最後の false パラメータによって、アプリケーションを越えるマッピングが防止されます。これにより、ユーザーが、アプリケーションの仮想ディレクトリ階層の外に移動するための ".." を含むパスの指定に成功することがなくなります。これを指定した場合は、タイプの HttpException の例外が発生します。 -------------- は読んでも良くわかりませんでした。 MapPath("../../CM/CM001.txt")を書き直した具体的なコードを教えてほしいです。 | ||||
|
投稿日時: 2006-05-20 23:40
セキュリティ上から自分の仮想ディレクトリ外のアクセスをしないように 親ディレクトリの参照はしないようにました。って書いてあるんですよね。 自分の仮想ディレクトリ以下にあるものだったら ルートから完全パスで書けばいけませんか? | ||||
|
投稿日時: 2006-05-21 10:29
おっと。これは気をつけなくてはなりませんよ。
具体的には、「パス トラバーサル」で調べてみると、なぜ「MapPath("../../CM/CM001.txt")」が禁止されているのか分かる筈。 具体的な対処としては、かるあさんの書き込みの通り。 (自分で、オレパスを返す関数を作って、全てのパスに対して使うようにしてもいいかも) | ||||
|
投稿日時: 2006-05-21 19:29
>>かるあ氏>>冬寂氏
了解です。 |
1