ユーザーがファイルをアップロードできるようにするフォルダーを保護するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/22519

質問

Web サーバーに、ユーザーが ASP ページを使用して写真をアップロードするために使用するフォルダーがあります。

IUSR にフォルダーへの書き込み権限を与えるのは十分安全ですか?他に何かを確保する必要がありますか?ハッカーが ASP ページをバイパスして、コンテンツをフォルダーに直接アップロードするのではないかと心配しています。

Windows 2003 Server で ASP クラシックと IIS6 を使用しています。アップロードは FTP ではなく HTTP 経由で行われます。

編集:わかりやすくするために質問を変更し、私の回答をコメントとして変更します。

役に立ちましたか?

解決

また、Web からアクセスできるフォルダーにユーザーがアップロードできないようにすることをお勧めします。最適な MIME タイプ検出でも失敗する可能性があり、MIME スニッフィングは失敗したが、IIS の MIME スニッフィングは正常に動作した場合に、ユーザーが JPEG に偽装した実行可能ファイルをアップロードすることは絶対に避けたいと考えます。

PHP の世界では、攻撃者が悪意のある PHP スクリプトをアップロードし、後で Web サーバー経由でアクセスする可能性があるため、事態はさらに悪化します。

常に、アップロードされたファイルをドキュメント ルートの外側のディレクトリに保存し、追加のサニタイズを行うアクセス スクリプトを介してファイルにアクセスします (そして、少なくとも画像や MIME タイプを明示的に設定します)。

他のヒント

ユーザーはどのように写真をアップロードしますか?アップロードされたファイルを受け入れる ASP ページを作成している場合、IIS がファイル I/O を実行するため、IIS を実行しているユーザーのみがフォルダーへの書き込み権限を必要とします。ASP ページでは、ハッカーがハード ドライブをいっぱいにするのを防ぐために、ファイル サイズをチェックし、何らかの認証形式を備えている必要があります。

FTP サーバーまたはその他のファイル転送方法を設定している場合、答えは選択した方法によって異なります。

書き込み権限を付与する必要がありますが、ファイルの MIME タイプをチェックして画像であることを確認できます。FSO は次のように使用できます。

set fs=Server.CreateObject("Scripting.FileSystemObject")
set f=fs.GetFile("upload.jpg")
'image mime types or image/jpeg or image/gif, so just check to see if "image" is instr
if instr(f.type, "image") = 0 then
   f.delete
end if
set f=nothing
set fs=nothing

また、ほとんどのアップロード COM オブジェクトには、ファイルを書き込む前にチェックできる type プロパティがあります。

費用対効果が最も高いのは、Web サイトからアクセスできないフォルダーからファイルをアップロード/ダウンロードできるアップロード コンポーネント (私は ASPUpload を使用しました) を使用することでしょう。

いくつかの認証フックを取得すると、ファイルはコンポーネントを通じてのみ利用できるため、誰かが何気なくフォルダーを参照してファイルをダウンロード (あなたの場合はアップロード) することを心配する必要はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top