3

「レポート」という共有フォルダがあります。このフォルダにはpdfファイルがあります。

fd6.pdf fd3.pdf

ユーザー「fd3」が認証されると、ユーザーはURLを介してこのフォルダー内の任意のPDFにアクセスできます。これを防ぐ簡単な方法はありますか?

4

2 に答える 2

1

これを実現する方法はいくつかあります。私はあなたの認証がFormsAuthまたは他のそのようなカスタムアプリケーション認証であり、偽装によって管理されていないことを前提としています(Windows Auth /偽装を使用している場合は、ファイルのACLを直接使用してこれを解決できます)。

  1. PDFファイルの管理対象モジュールを呼び出すようにIISを構成する必要があります。IIS7 +を使用している場合は、統合パイプラインを使用できるため、これは簡単です。IIS6を使用している場合、またはクラシックパイプラインを使用する必要がある場合は、マネージコードを静的コンテンツに対して実行できるように、ワイルドカードマッピングを使用するか、少なくともPDF拡張機能をマップする必要があります。
  2. 別のを作成するか、IHttpModuleWebアプリケーションのGlobal.asax.csに追加します。あなたがしたいのは、アプリケーションのAuthorizeRequestイベントに添付することです。
  3. パスとファイル名をチェックして、ルールに一致するかどうかを確認してください。失敗した場合は、Response.StatusCodeを403(HTTP:Forbidden)に設定します。

Global.asax.csの例:

protected void Application_AuthorizationRequest(object sender, EventArgs e)
{
    var application = (HttpApplication)sender;
    var context = application.Context;

    if (context.User.Identity.IsAuthenticated
        && Path.GetFileName(Path.GetDirectoryName(context.Request.Path)).Equals("reports", StringComparison.OrdinalIgnoreCase)
        && Path.GetExtension(context.Request.Path).EndsWith("pdf", StringComparison.OrdinalIgnoreCase))
    {
        var fileName = Path.GetFileNameWithoutExtension(context.Request.Path);

        if (!context.User.Identity.Name.Equals(fileName, StringComparison.InvariantCultureIgnoreCase))
        {
            context.Response.StatusCode = 403;
            context.Response.StatusDescription = "You are forbidden to view this file.";
        }
    }
}
于 2013-01-01T00:26:02.133 に答える
1

web.configのlocal属性でファイルを保護するのが好きです

 <location path="pdfs/files">
<system.web>
  <authorization>
    <allow roles="superuser,admin,VolunteerCoordinator,presenter,ReferralMaker"/>
    <deny users="*"/>
  </authorization>
</system.web>

次に、保護しているディレクトリへのアクセスを防ぐために役割が定義されていることを確認します

于 2013-01-01T06:58:46.717 に答える