私は PHP アプリケーションを介してユーザーのアップロードを処理しています。
PHP シェルをアップロードして実行するなど、ユーザーが悪用できないようにサーバーを保護したいと考えています。
すべてのアップロードが Web ルート外の別のフォルダに移動されるように設定しました。追加のセキュリティとして、特定のフォルダの IUSR から「読み取り」以外のすべての権限を削除しました。
さらに一歩進んで、IIS 経由でフォルダー上のスクリプト実行を無効にするように指示されました。
私の状況と、すでに行ったことを考慮すると、これは必要ですか? 必要な場合、IIS 8 を使用してこれをどのように実現しますか。
ありがとう
答え1
「これは必要か」という質問に対する答えは、このアプリケーションと組織に必要なセキュリティ レベルを調べる必要があるということです。
セキュリティのベスト プラクティスでは、「多層防御」アプローチが推奨されています。これは、セキュリティとは、情報 (またはその他の) 資産を保護するためのセキュリティ制御の階層化であることを意味します。
このデータに追加の制御が必要かどうかを判断するには、リスクを評価します。つまり、悪用される可能性のある脅威が存在する可能性はどの程度か、このデータ/システムが侵害された場合の影響は何か、データの機密性だけでなく、悪意のあるユーザーがデータを変更したり、システムをダウンさせたり、データを削除したりする可能性も考慮します。次に、制御のコストが制御を導入することによるメリットを上回るかどうかを判断します。メリットが上回らない場合は制御を実装し、制御を実装する方が「高価」な場合はリスクを受け入れます。
仮想ディレクトリへのスクリプト アクセスを拒否することは、実装するのがかなり簡単なことであり、権限を昇格できる悪意のあるユーザーに対する防御層になります。ディレクトリにアップロードされたファイルを実行できないように、この制御を実装するのが一般的です (たとえば、リモート シェルを取得するため)。したがって、「コスト」がわずかで、リモート シェルを取得すると、可能性は低くても影響が大きいと想定される場合、答えはフォルダーでのスクリプト実行を無効にすることです (この評価に同意しない場合は、ここで自由に判断してください)。
IIS 8 でフォルダーへのスクリプト アクセスを無効にするには、IIS 7 と同じ手順で、web.config でハンドラー マッピングを構成します。
このリンクではさまざまなオプションについて説明しています:
おそらくこれが必要なことであり、静的ファイル ハンドラーが保持されます。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<handlers>
<clear />
<add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" />
</handlers>
</system.webServer>
</configuration>
必要な構成については、そのページの最後のコメントにも注意してください。
同じ問題に遭遇している可能性のある他のユーザーのために、投稿されたソリューションに追加します。ハンドラーが最上位レベルでロックされていることが分かるまで、これらのソリューションはどれも機能しませんでした。私はサーバー管理者でもなければ、それに近いわけでもないので、少し時間がかかりました。applicationHost.config ファイルが編集されてオーバーライドが許可されるまで、下位レベルの web.config ファイルに空のセクションを含めるだけでも、そのレベル以下のすべてを壊すのに十分でした。しかし、今はうまく機能しています。