0

Win8/VS2012 マシンで ASP.NET 2.0 Web アプリケーションを開発しました (ただし、4.0 ではなく .NET2.0 を使用しています)。フォーム認証を使用して、特定のロールの Content/Documents フォルダーに保存されている PDF ファイルなど、多数のフォルダーへの直接アクセスを保護したいと考えています。私の開発マシンでは、以下の web.config ファイルで動作します。PDF の URL を直接入力すると、ログイン ページにリダイレクトされます。

ただし、ソリューション全体を運用サーバー (Windows サーバー 2003R2 sp1、.NET 2 および 4 がインストールされている) にコピーすると、ファイルに直接アクセスでき、フォーム認証が機能しないように見えます。

サーバーでこれを調査するにはどうすればよいですか? 私の設定で何が問題になっていますか?

注: ロールはロール プロバイダーなしでログイン時に割り当てられます (インターネットおよびスタック オーバーフローに関する多くの記事で示されているように)。

注 2: win2003R2 サーバーの IIS 管理ツールで、構成ウィンドウが web.config ファイルにあるものと一致しないことに気付きました。IISマネージャーでWebアプリのプロパティを右クリックし、ASP.NETタブに移動し、構成の編集に移動して、さまざまな場所の承認タブに移動すると、構成ファイルには明らかに拒否*が含まれているのに、許可*のみが記載されているように見えます。そのサーバーでは、このタイプの構成ファイルがサポートされていない可能性があります (ただし、エラーは発生しません)。

事前にThx

ウィム

<?xml version="1.0"?>
<!-- 
Note: As an alternative to hand editing this file you can use the 
web admin tool to configure settings for your application. Use
the Website->Asp.Net Configuration option in Visual Studio.
A full list of settings and comments can be found in 
machine.config.comments usually located in 
\Windows\Microsoft.Net\Framework\v2.x\Config 
-->
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
 <connectionStrings>
   <add name="..." connectionString="..."  
   providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web>
  <httpRuntime maxRequestLength="102400" executionTimeout="600"/>
  <authentication    mode="Forms">
    <forms name="MYWEBAPP.ASPXAUTH"
           loginUrl="member_login.aspx"
           protection="All"
           path="/"/>
  </authentication>
  <authorization>
    <allow users="*"/>
  </authorization>
  <customErrors mode="Off"></customErrors>
  <compilation debug="true"/>
</system.web>

<location path="Content/Documents"> 
  <system.web>
    <authorization> 
      <allow roles="MEMBER,ADMINISTRATOR"/> 
      <deny users="*"/> 
    </authorization>
  </system.web>
</location>
<location path="Content/Events">
  <system.web>
    <authorization>
      <allow roles="MEMBER,ADMINISTRATOR"/>
      <deny users="*"/>
    </authorization>
  </system.web>
</location>
<location path="Content/News">
  <system.web>
    <authorization>
      <allow roles="MEMBER,ADMINISTRATOR"/>
      <deny users="*"/>
    </authorization>
  </system.web>
</location>
<location path="Content/PriceChange">
  <system.web>
    <authorization>
      <allow roles="MEMBER,ADMINISTRATOR"/>
      <deny users="*"/>
    </authorization>
  </system.web>
</location>
<location path="Administrator">
  <system.web>
    <authorization>
      <allow roles="MEMBER,ADMINISTRATOR"/>
      <deny users="*"/>
    </authorization>
  </system.web>
</location>
<location path="Member"> 
  <system.web>
    <authorization> 
      <allow roles="MEMBER,ADMINISTRATOR"/> 
      <deny users="*"/> 
    </authorization>
  </system.web>
</location>
</configuration>
4

1 に答える 1

0

設定に問題はありません。むしろ、静的ファイル(jpg、csses、pdf) は、asp.net パイプラインを使用せずに iis によって処理されます。これは、pdf ファイルを要求するときに承認規則が無視されることを意味します。

これを修正するには、ダウンロードする必要があるファイルを示すパラメーターを取得する aspx ページを作成するか、asp.net パイプラインを介して一部 (またはすべて) の静的ファイルを実行するようにアプリケーションを構成します。すべてのリクエストが asplnet を通過する最も簡単な方法は、次のように設定することです

runAllManagedModulesForAllRequests="true" 

web.config のモジュール セクションにあります。

于 2013-10-24T21:29:36.583 に答える