13 месяцев спустя я хотел вернуться к своему собственному вопросу. За это время я перевел полдюжины веб-сайтов из IIS 6 в IIS 7.5 и настроил их по своему предпочтительному методу. Все, что я могу сказать, это то, что веб-сайты работают, у них не было проблем с безопасностью (не то, что это популярные сайты), и, на мой взгляд, настройка более безопасна, чем то, что рекомендует learn.iis.net.
Для потомков здесь приведены соответствующие настройки. В PHP INI:
cgi.force_redirect = 0
cgi.fix_pathinfo=1
fastcgi.impersonate = 0
В IIS:
- Пул приложений> Идентичность> ApplicationPoolIdentity
- Веб-сайт> Аутентификация> Анонимная аутентификация> Конкретный пользователь: IUSR
Разрешения NTFS и где их применять:
- IUSR - Грант Читать, Запретить Написать
- Корневой каталог веб-сайта IIS. Например, в проекте Zend Framework это будет каталог / public.
- Если ваше приложение загружает файлы и сохраняет их в общедоступном каталоге, вам необходимо применить это разрешение к временному каталогу загрузки. Это потому,
move_uploaded_file
что сохранит права на каталог загрузки. Это самый большой недостаток этой настройки разрешений, который я обнаружил.
- ApplicationPoolIdentity (
IIS AppPool\<<YourApplicationPoolName>>
) - Предоставить чтение и список
- Корень вашего PHP-приложения. Например, в проекте Zend Framework это будет весь проект.
- Любые внешние библиотеки (Zend, Doctrine и т. Д.), Включенные в ваше приложение, которых нет в папке приложения.
- ApplicationPoolIdentity - Грант Модифицировать
- Любое место , где ваше приложение будет писать такие как
upload_tmp_dir
, session.save_path
, и error_log
.
- Иногда мне нужно добавить это разрешение в корень приложения PHP в моей среде разработки для поддержки таких вещей, как автоматическая генерация прокси в Doctrine .
- ApplicationPoolIdentity - список грантов
- Если ваше приложение находится в виртуальном каталоге, вам необходимо добавить это разрешение в корневой каталог веб-сайта. Это позволяет вашему приложению читать его родительский файл web.config. Например, если корнем приложения является http://example.com/MyPHPApp , установите это разрешение в веб-каталоге example.com. В частности, вам нужно только обратиться к «Эта папка и файлы», «только в этом контейнере».
Я надеюсь, что это поможет любому, кто решит, что инструкции learn.iis.net не идеальны.