たまにこの手の質問あるんですが、security のこと考えてどのように実装すべきか?書かれたものが意外と少ないので書いておきます。
この手の質問の多くは upload をどのように実装すべきか?という話になると思いますので、これを前提に話を進めます。
まず、ASP.NET (結局 server-side で動作する application 全般に当てはまるわけですが) で原則 Web へ公開する directory へ書き込んではいけません。
例外は下記
- IIS で匿名認証を使用している状態で、かつ upload されたものが不特定多数に公開していい場合
- IIS で匿名認証以外の認証を利用している場合
上記の場合でも、そのまま書き込んで良いわけではなく、upload 専用の「仮想ディレクトリ」を作成して「実行アクセス権」を「なし」にしましょう。
まあ、default の ACL では書き込みが出来ないようになっているので制限を緩めない限り問題ないんですが、深く考慮せず安易に許可している場合が結構あると思います。
それから、こちらは上記の場合以上に多いような気がしますが、IIS の認証を利用せず(つまり匿名認証)独自の認証を利用している場合。
この場合、「仮想ディレクトリ」に書き込んではいけません。
Web で公開しない directory に対象を保存しておいて application 側でそれを読み込み binary write するべきです。
# IIS に限らずここら辺がいい加減な site 結構あるんですよね。
まあ、冷静になってちゃんと考えればすぐにわかることばかりなんですが、とりあえず気をつけましょう。