私の Web アプリケーションでは、人々は Web フォームから Web サーバーに画像をアップロードできます。
その画像アップロード ディレクトリの CHMOD 設定をどのように設定すれば、ユーザーが (Web サーバーから) そのディレクトリに画像をアップロードできるようになりますが、セキュリティ上の理由からアップロードしたファイルを実行することはできません。
chmodの設定は?:
chmod 744 directory/
このコンテキストでは、「実行可能ファイル」には 2 つの意味があり、どちらも構成する必要があります。
ファイル名をシェルに入力してコマンドラインから実行できる実行可能バイナリ ファイル
Web サーバーによってスクリプトとして読み取られ、処理されるファイル。
バイナリ実行可能ファイルの処理
un*x システムでケース 1 に対して構成するには、アップロード ディレクトリとその中のファイルが Web サーバー ユーザーによって所有され、そのユーザーのみが読み取り可能であることを確認する必要があります。ディレクトリは実行可能でなければなりません。これは、そのディレクトリ内のファイルにアクセスできることを意味します)。Web ユーザーがディレクトリ内のファイルを一覧表示する必要がある場合は、それも読み取り可能である必要があります。もちろん、新しいファイルを作成できるように、書き込み可能である必要もあります。
したがって、必要な8進セットは次のようになります
chown <web-server-user> <upload-dir>
chmod 0700 <upload-dir>
ファイルは実行可能であってはならず、Web サーバーによってのみ読み書き可能であるべきです。
chmod 0600 <uploaded-file>
これは、Web サーバーのユーザーのみがこれらのファイルを表示できることを意味することに注意してください。これは、セキュリティにとって最適な状況です。ただし、他のローカル ユーザーがこれらのファイルを参照できるようにする必要がある場合は、
chmod 0755 <upload-dir>
chmod 0644 <uploaded-file>
Web サーバーの実行可能ファイルの処理
ケース 2 に対するコーディングは、Web サーバー固有です。
1 つのオプションは、アップロード ディレクトリを webroot の外に置き、アップロードされたファイルへの直接の URL アクセスを完全に拒否し、サーバー側のコードを介してのみそれらを提供することです。コードはファイルの内容を読み取ってエコーするため、Web サーバーによってスクリプトとして処理されることはありません。
もう 1 つのオプションは、アップロード ディレクトリ内のファイルのスクリプト処理を許可しないように Web サーバーを構成することです。この構成は Web サーバー固有です。ただし、たとえば Apache では、サーバー構成に入力することでこれを実現できます。
<Directory "path-to-upload-dir">
AllowOverride None
Options -ExecCGI
</Directory>
AllowOverride None は重要です。.htaccess ファイルをアップロード ディレクトリにアップロードし、そのディレクトリの Web サーバーのアクセス許可を再構成することを阻止するためです。
ディレクトリの chmod はこれを行うことができず、さらに、モードが何であれ、Web サーバーは .php を実行可能として解釈する場合があります。おそらく、使用しているサーバーを指定する必要があるでしょう。使用できる .htaccess または同様のディレクティブがあるかもしれません。
ディレクトリの「実行」は「ディレクトリ内のファイルにアクセスできる」ことを意味するため、Webサーバーに内部のファイルへのアクセスを許可する場合は設定する必要があることに注意してください...