2012-04-04 8 views
2

今日私の新しいサーバーでいくつかのことを試してみました。そして、iveはMVCアプリケーションで何が行われたかに大きな欠陥を発見しました。MVC 3、URLを介してサーバー上の人のブラウジングを防ぎます

アップリケーションで起こっていることは、人々がページにアクセスしてログインできることです。ユーザーがログインすると、サーバー上の自分のフォルダにファイルをアップロードできます。彼らは彼らが望むときに彼らにアクセスすることができます。しかし、問題が見つかったのは、右のURLを入力すれば、人々は望む任意のフォルダを見ることができるということです。

UR1は次のように指定できます。testnameweb.com/Upload/testUserName/testfilename.png この場合、urlを入力するとtestfilename.pngファイルが表示されます。同じ人が入力した場合: testnameweb.com/Upload/

彼らは任意の人のフォルダを参照して、任意の方法でサーバーを参照してください。

これを防ぐにはどうすればよいですか?

+0

あなたが話しているフォルダで有効になっている認証の種類を確認しましたか? – NiK

答えて

7

最初の手順は、これらのファイルを一般にアクセスできないフォルダに置くことです。たとえば、App_Dataです。または、アプリケーションルートの外部にあるフォルダ。次に、ユーザーごとにファイルをフォルダに整理できます。したがって、各ユーザーはそれぞれ独自のサブフォルダを持ちます。次に、ファイル名を渡し、現在認証されているユーザーに基づいて適切なファイルを処理するコントローラーアクションを書き込むことができます。

[Authorize] 
public ActionResult File(string filename) 
{ 
    string username = User.Identity.Name; 
    // now that you know the currently connected username and the filename 
    // go and find the corresponding file and stream it as a result 
    ... 
} 

そして、現在接続しているユーザーがファイルを閲覧することができるようにリンクを提供する:

あなたは、ファイル名にURLを変換しているUploadControllerを持つユーザーでログインしていることを確認すると仮定すると、
@Html.ActionLink("Open foo.txt", "file", new { filename = "foo.txt" }) 
2

そのコントローラーのファイルを表示する前にそのコントローラー内のファイルを表示する権限を持っています。

関連する問題