web-dev-qa-db-ja.com

ASP / ASP.NET書き込みアクセス許可を処理する最良の方法は?

IIS)にパブリックASP.NET(またはクラシックASP)アプリケーションがあり、Webパブリッシングフォルダーツリー内にある特定のフォルダー内のファイルを書き込んだり更新したりする必要があるスクリプトがあるとします。 。

1)これを設定する適切な方法は何ですか?

私の主な関心事は、ASP/ASP.NETアプリにフォルダーへの書き込みを許可したいのですが、通常のhttpユーザーがファイルをフォルダーに入れられるようにしたくないということです。

4
Matias Nino

まず、私は、ディスクにデータを書き込むよりも、ほとんどの場合、より良い解決策があると信じています。データをデータベースに書き込む場合でも、Webサービスにフィードする場合でも、ディスクへの書き込みは最後のオプションです。
いくつかの正当な理由があると言われていますが、これは一種のトリッキーであり、アプリがファイルを書き出す必要がある理由によって異なります。

コードの実行元以外の場所にデータを書き込むことは、絶対的な要件です。エンドユーザーがASPX/aspエンジンがコードを解釈/実行できるパスに書き込むことを許可することは、明らかな理由で悪いことです。

これに影響を与える他のいくつかのものは次のとおりです。

  1. ワーカープロセスをドメインアカウントで実行しているか、標準のネットワークサービスで実行しているか。 IIS_WPGグループにフォルダーへの書き込みアクセスを許可すると、サーバー上の既定のアカウントで実行されているASP.NETアプリケーションがそのフォルダーにファイルを書き込む可能性があることを理解することが重要です。これは、特にアプリケーションが信頼されていない場合やISP /共有ホスティング環境で実行されている場合に、複数のアプリケーションが実行されるサーバーでは理想的とは言えません。
  2. 生成されたファイルをWebで利用できるようにする必要があるかどうか。アプリケーションがWebで表示できないファイルを書き出すだけの場合は、ディレクトリを作成し、権限を付与し、正しい場所に対して読み取り/書き込みを行うようにアプリケーションを構成するだけです。アプリケーションがWeb表示可能ファイルを書き出す必要がある場合(これはコンテンツ管理シナリオでかなり一般的に発生します)、書き込み可能ディレクトリにマップする仮想ディレクトリ(実行コード/スクリプト権限なし)を作成する必要があります。
  3. 負荷分散/ Webファーム環境で作業しているかどうか。アプリケーションがファーム環境で動作しており、何らかの理由でファイルをディスクに書き込む必要がある場合、まったく新しい問題が発生します。 webserver1でユーザーが生成したファイルをwebserver2で生成されたファイルとどのように同期させますか?いくつかの複雑な同期スクリプトを介してそれを行うことは、せいぜい苦痛であり、レース/同期の問題に悩まされています。これを実装する最良の方法は、3番目のサーバー(理想的には冗長性のあるクラスター)に共有を作成し、そこにデータを格納することです。ドメインアカウント(セキュリティのベストプラクティス)でワーカープロセスを実行している場合は、コードまたはweb.configのどこにもユーザー/パスがなくてもアプリケーションの共有にマップできます(監査/セキュリティ担当者を満足させます)。 IISには、仮想ディレクトリをUNCパスにマップする機能もあるため、このコンテンツをWebで表示できるようにする機能に影響はありません。
5
Dominic D

App_Dataフォルダー

ASP.NETアプリケーションで使用されるデータのセキュリティを向上させるために、App_Dataという名前の新しいサブフォルダーがASP.NETアプリケーション用に追加されました。 App_Dataフォルダーに保存されているファイルは、直接のHTTP要求に応答して返されないため、App_Dataフォルダーは、.mdf(SQL Server Express Edition)、. mdb(Microsoft Access)、XMLなど、アプリケーションと共に保存されるデータの推奨場所になりますファイル。 App_Dataフォルダーを使用してアプリケーションデータを格納する場合、アプリケーションのIDにはApp_Dataフォルダーに対する読み取りおよび書き込み権限があることに注意してください。

ASP.NETデータアクセスの新機能

2
Dscoduc

おそらく、見渡すことに賭けています stackoverflow.com .. ..

ベストプラクティスは、そのフォルダーをドキュメントルートの外に置き、アプリをファイルシステムから読み取ることです。それ以外の場合は、ASP [.NET]ユーザー以外はフォルダーを読み取り専用にして、アプリの内部認証で書き込み権限を制御します。

1
squillman

App_Dataは、デフォルトでは書き込み可能ですが読み取り可能ではありません。サーバーはこれを変更しようとする試みに抵抗するようです。したがって、完全に新しいフォルダを作成し、そのフォルダのアクセス許可を「実行不可」、「読み取り可能」、「書き込み可能」に変更することをお勧めします。

1
harborsparrow