3

私は長年この疑問を抱いており、この問題が発生するたびに調査を行いましたが、明確な答えを見つけることができませんでした. 強力なインターネット、MSDN、コミュニティ フォーラムは、どういうわけか、これについて沈黙しているか、あいまいです。何千もの開発関連の不確実性のうち、これはとらえどころのないままであった唯一のものです.

要するに、ユーザーがブログ投稿で使用される画像 (およびその他のファイル) をアップロードして管理できるようにするために、共有ホスティング環境で、SQL Server のバイナリ データ型 (パフォーマンスへの影響) またはファイル システムのいずれかを考慮することができます。後者を使用するには、ストレージ ディレクトリの IIS_IUSRS ロールに必要なアクセス許可を設定する必要があります: 作成/書き込み、読み取り、および削除。私の質問 - これを行うと、セキュリティにどのような影響がありますか? 誰かがこれを利用して、ASP.NET 要求パイプラインをバイパスし、対応する ASP.NET ハンドラー (権利のチェック、アップロードの検証など) に要求を行わずに、フォルダー内のファイルを操作できますか?

私はファイルのアップロードを許可するいくつかのシステムを開発しましたが、これは常に私を悩ませてきました。さて、うまくいけば、誰かが私の心を安心させ、理想的には、プロセスの背後にあるメカニズムを説明してくれるでしょう.


アップデート

最新の回答を見た後(どうもありがとう)、質問の別の定式化:

クライアントが何らかの方法でリクエストパイプラインをバイパスし、それを許可するディレクトリ内でファイルを作成/削除することは可能ですか (その人がディレクトリ構造を知っていると仮定して)? それとも、リクエストを処理するコードだけがそれを行うことができますか? 潜在的なエクスプロイトはありますか?

4

2 に答える 2

1
于 2012-11-01T06:26:04.370 に答える
1

以前にこれを行ったので、2つの推奨事項を作成します。

まず、アップロードされたファイルをアプリケーション コードと同じディレクトリ構造に保存しないでください (可能な場合)。明確に定義された外部の場所にし、アプリケーションを実行しているユーザーのみに明示的にロックダウンします。これにより、Web サーバーまたは ASP.NET 自体がファイルへのアクセス方法を認識していないため (アプリケーションのみ)、悪意のあるアップロードがアプリケーションに挿入されるのが難しくなります。

それが絶対に不可能な場合は、外部ユーザーが標準の ASP.NET 認証を使用してストレージ フォルダーにアクセスできないようにし、アプリケーション ユーザーによるこのフォルダーへの書き込みのみを許可し、それ以外は許可しないようにしてください。

次に、アップロードされたファイルを元の名前とファイル拡張子で保存しないでください。そのメタデータを分離してください。ファイルをデータの生のバイナリ BLOB と考えてください。これにはいくつかの理由があります。第 1 に、ファイル システム、Web サーバー、または ASP.NET に直接アクセスするユーザーによる、サーバー上のファイルの不注意による実行を防止します。第 2 に、サーバー上のファイルの名前やパスを推測できないため、攻撃者が悪意のあるアップロードを悪用することがはるかに困難になります。

于 2012-11-01T06:59:47.517 に答える