完全に安全にするには、いくつかのことを行う必要があります。
アップロード ディレクトリを「public」フォルダの上に設定し、ブラウザからアクセスできないようにします。この設定は、php.ini (php 構成ファイル) にあります。これを有効にするには、Apache を再起動する必要があります。ほとんどの Redhat / Fedora / CentOS Web サーバーでは、次のようになります。
upload_tmp_dir = "/var/tmp/"
または、ローカルの Windows 7 WAMP インストールでは、次のように設定されています。
upload_tmp_dir = "c:/wamp/tmp"
.htaccess で、そのディレクトリ (c:/wamp/tmp) でのスクリプトの実行を無効にします。
RemoveHandler .php .phtml .php3
RemoveType .php .phtml .php3
php_flag engine off
PHP スクリプトで、アップロードされたファイルを取得し、MIME タイプ (ファイルタイプの拡張子ではない) に基づいてフィルター処理し、ファイル名を変更して、セキュリティで保護された一般にアクセス可能なフォルダーに配置します。さらに詳細に:
ファイルタイプのフィルタリングを含む、Zend Framework などの MVC フレームワークを使用することをお勧めします。
これをすべて実行すれば、安全なはずです。特に古いシステムでは、PHP、MySQL、コマンドラインなどを標的とする無数のあいまいなエクスプロイトがあるため、明らかに 100% 安全ということはありません。大企業の Web サーバー (私が取り組んでいるもの) では、すべてを無効にし、プロジェクトに必要なものだけを選択的に有効にします。WAMP などのシステムを使用すると、すべてが可能になり、ローカル開発が容易になります。
プロのプロジェクトに取り組むための良い方法は、Rackspace または Amazon でクラウド サーバー アカウントを取得し、php.ini と httpd.conf 設定の構成方法、および PHP セキュリティのベスト プラクティスを学ぶことです。一般に、ユーザーの入力を信頼しないでください。入力が破損している、悪意がある、または形式が正しくないことを期待してください。そうすれば、最終的には安全になります。