13か月後、私は自分の質問を再検討したかった。その間に、私はIIS 6からIIS 7.5に6個のWebサイトを転送し、好みの方法でそれらを構成しました。私が言えることは、ウェブサイトが機能し、セキュリティの問題がなく(これらは人気のあるサイトではない)、そして私の意見では、学習はlearn.iis.netが推奨するものよりも安全であるということです。
後世のために、関連する設定を以下に示します。PHP INIの場合:
cgi.force_redirect = 0
cgi.fix_pathinfo=1
fastcgi.impersonate = 0
IISの場合:
- アプリケーションプール> ID> ApplicationPoolIdentity
- Webサイト>認証>匿名認証>特定のユーザー:IUSR
NTFSアクセス許可とそれらを適用する場所:
- IUSR-読み取り許可、書き込み拒否
- IIS Webサイトのルートディレクトリ。たとえば、Zend Frameworkプロジェクトでは、これは/ publicディレクトリになります。
- アプリケーションがファイルをアップロードしてパブリックディレクトリに保存する場合、この許可を一時アップロードディレクトリに適用する必要があります。これは
move_uploaded_file
、アップロードディレクトリの権限が保持されるためです。これは、私が見つけたこの許可設定の最大の欠点です。
- ApplicationPoolIdentity(
IIS AppPool\<<YourApplicationPoolName>>
)-読み取りとリストの付与
- PHPアプリケーションのルート。たとえば、Zend Frameworkプロジェクトでは、これがプロジェクト全体になります。
- アプリケーションフォルダーにない、アプリケーションに含まれる外部ライブラリ(Zend、Doctrineなど)。
- ApplicationPoolIdentity-変更の付与
- あなたのアプリケーションのような書き込みをする任意の場所
upload_tmp_dir
、session.save_path
そして、error_log
。
- Doctrineのプロキシの自動生成などをサポートするために、開発環境のPHPアプリケーションのルートにこの権限を追加する必要がある場合があります。
- ApplicationPoolIdentity-許可リスト
- アプリケーションが仮想ディレクトリにある場合、この権限をWebサイトのルートに追加する必要があります。これにより、アプリケーションはその親web.configを読み取ることができます。たとえば、アプリケーションのルートがhttp://example.com/MyPHPAppである場合、example.com Webディレクトリでこの権限を設定します。具体的には、「このフォルダとファイル」、「このコンテナ内のみ」にのみ適用する必要があります。
これが、learn.iis.netの指示が理想的ではないと判断した人の助けになることを願っています。