ログイン IIS 7.5でASP.NETフォーム認証で静的ファイルを保護するにはどうすればよいですか?



web.config authentication forms (5)

共有ホスト上にASP.NET 4.0を搭載したIIS 7.5サーバー上で実行されているWebサイトがありますが、完全に信頼できます。

このサイトは、訪問者がログインし、利用可能なファイルのリストを表示し、明らかにファイルをダウンロードできる基本的な「ファイルブラウザ」です。 静的なファイル(主にpdfファイル)は、データと呼ばれるサイトのサブフォルダにあります(例: http://example.com/data/ : http://example.com/data/ ...)。

このサイトはASP.NETフォーム認証を使用します。

私の質問です:どのように私は、ファイルの要求がASP.NETによって認証され、ユーザーがファイルに深くリンクすることができないように、データフォルダー内の静的ファイルの要求を処理するASP.NETエンジンを取得する彼らは許可されていないファイルをつかむ?

敬具、Egil。


Answer #1

アプリケーションプールがクラシックモードで実行されている場合は、次の操作を実行できます。 処理するファイル拡張子ごとにこれらの手順を繰り返す必要がありますが、ここでは.htmlを使用しています。

まず、Web.configにページビルドプロバイダを追加します。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.web> 
    <compilation>
      <buildProviders>
        <add type="System.Web.Compilation.PageBuildProvider" extension=".html"/>
      </buildProviders>
    </compilation>
  </system.web> 
</configuration>

次に、ページハンドラファクトリを追加します。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.web> 
    <httpHandlers>
      <add type="System.Web.UI.PageHandlerFactory" path="*.html" verb="*"/>
    </httpHandlers>
  </system.web> 
</configuration>

次に、ページハンドラを追加します。

<?xml version="1.0" encoding="UTF-8"?>
<configuration> 
  <system.webServer>
    <handlers>
      <add scriptProcessor="C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" requireAccess="Script" preCondition="classicMode,runtimeVersionv2.0,bitness32" path="*.html" verb="GET,HEAD,POST,DEBUG" modules="IsapiModule" name="HtmlHandler-Classic-32" />
      <add scriptProcessor="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" requireAccess="Script" preCondition="classicMode,runtimeVersionv2.0,bitness64" path="*.html" verb="GET,HEAD,POST,DEBUG" name="HtmlHandler-Classic-64"/>
    </handlers>
  </system.webServer>
</configuration>

これは私のために働いた。 (提供: http://www.ifinity.com.au/Blog/EntryId/66/How-To-301-Redirect-htm-or-html-pages-to-DotNetNuke-aspx-pages : http://www.ifinity.com.au/Blog/EntryId/66/How-To-301-Redirect-htm-or-html-pages-to-DotNetNuke-aspx-pages


Answer #2

補遺:

@eychが指摘しているように、 ~/Contentフォルダ(またはCSSを持っている場所)や~/Scriptsなどへのアクセスもブロックされます。

例外を許可したい場合、つまり認証されていないユーザーが特定のファイルやフォルダにアクセスできるようにする場合は、 location要素を使用してアクセスできます。 web.config次を追加します。

  <location path="Content">
    <system.web>
      <authorization>
        <allow users="*" />
      </authorization>
    </system.web>
  </location>

アップデート:より良い解決策は、CSS / JavaScript /などへのアクセスを許可するデフォルトでアクセスを残し、静的コンテンツが格納されているフォルダに「ロック」(のみ)を適用することです。

<location path="data">
  <system.web>
    <authorization>
      <deny users="?"/>
    </authorization>
  </system.web>
</location>

注意:私たちの場合(MVCサイト)には、 [AuthorizeAttribute]使ってすべてのコントローラアクション(ログインを除く)を飾る必要がありました。 とにかく良いアイデアですが、以前は不要だった(以前許可されていないリクエストがログインページにリダイレクトされたためです)。



Answer #4

これは古いスレッドですが、私はそれに起こって、Egilと同じ問題に遭遇しました。 ロールを含むJoelの修正のバージョンは次のとおりです。

<modules runAllManagedModulesForAllRequests="false">
      <remove name="FormsAuthenticationModule" />
      <add name="FormsAuthenticationModule" type="System.Web.Security.FormsAuthenticationModule" />
      <remove name="UrlAuthorization" />
      <add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule"  />
      <remove name="RoleManager" />
      <add name="RoleManager" type="System.Web.Security.RoleManagerModule" />
      <remove name="DefaultAuthentication" />
      <add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" />
</modules>

Answer #5

アプリケーションプールが統合モードで実行されている場合は、次の操作を実行できます。

トップレベルのweb.configに以下を追加してください。

  <system.webServer>
    <modules>
      <add  name="FormsAuthenticationModule"  type="System.Web.Security.FormsAuthenticationModule" />
      <remove  name="UrlAuthorization" />
      <add  name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule"  />
      <remove  name="DefaultAuthentication" />
      <add  name="DefaultAuthentication"  type="System.Web.Security.DefaultAuthenticationModule" />
    </modules>
  </system.webServer>

これで、web.configの標準のASP.NET権限を使用して、ディレクトリ内のすべてのファイルのフォーム認証を強制できます。

<system.web>
    <authorization>
        <deny users="?" />
    </authorization>
    <authentication mode="Forms" />
</system.web>




iis-7.5