1

フォーム認証を使用してユーザーを認証しています。私たちのアプリケーションでは、exeをダウンロードするページがあります。フォーム認証を使用して匿名ユーザーがファイルにアクセスするのを防ぐ方法を教えてください。

Visual Studioでコードをデバッグするときに、ログインしているユーザーだけがファイルをダウンロードできます。他のユーザーがファイルをダウンロードしようとすると、自動的にログインページにリダイレクトされます。

しかし、これを仮想ディレクトリから実行している場合、ログインしているかどうかにかかわらず、すべてのユーザーはhttp://testappln/foldername/test.exeのようなダイレクトパスにアクセスしてファイルをダウンロードできます。

このような状況で許可されていないユーザーにアクセスすることを防ぐにはどうすればよいですか?

+0

使用しているIISのバージョンはどれですか? IIS 7.0+を使用している場合は、クラシックモードまたは統合モードで実行していますか?ユーザがブラウザからサーバー上の 'C:\ foldername \ test.exe'にアクセスするにはどうすればいいですか? –

+0

@DarinDimitrov:申し訳ありません..私はパスを変更しました。:) –

+0

@DarinDimitrov:IIS5.1 –

答えて

3

直接アクセスが禁止されているApp_Dataフォルダ内にファイルを置いてから、ファイルの内容を読み取り、クライアントに返す汎用ASHXハンドラが必要です。その後、認証されたユーザーのみにこのジェネリックハンドラへのアクセスを制限できます。

<%@ WebHandler Language="C#" Class="Download" %> 

using System; 
using System.Web; 

public class Download : IHttpHandler 
{ 
    public void ProcessRequest (HttpContext context) 
    { 
     context.Response.ContentType = "application/octet-stream"; 
     context.Response.WriteFile("~/App_Data/test.exe"); 
    } 

    public bool IsReusable 
    { 
     get 
     { 
      return false; 
     } 
    } 
} 

をし、あなたのweb.configファイルで、あなたはDownload.ashxハンドラへのアクセスを制限:

<location path="Download.ashx"> 
    <system.web> 
     <authorization> 
      <deny users="?"/> 
     </authorization> 
    </system.web> 
</location> 
+0

このようなファイルをjavascript window.open( 'http://testappln/foldername/test.exe' 、 'ダウンロード')、どうすればこのケースを処理できますか? –

+0

@mahesh、このように: 'window.open( 'download.ashx'、 'Download');'。 –

1

非常に単純なアプローチがにありますIISを使用してフォルダへの匿名アクセスを防止します。 IISを開くだけでサイトを選択し、保護するフォルダを選択します。 フォルダを選択した後、認証ページの認証(IISセクション内)をダブルクリックし、匿名認証を無効にします。 これで、サイトで認証されたユーザーだけが、選択したフォルダにアクセスできます。

関連する問題