Назад | Перейти на главную страницу

Должен ли я выдавать себя за PHP через FastCGI?

Я устанавливаю последнюю версию PHP на IIS 7.5 через FastCGI, и все инструкции говорят, что FastCGI должен олицетворять вызывающего клиента, установив

 fastcgi.impersonate = 1

Если у моего сайта будет такая конфигурация

почему я хочу выдать себя за другое лицо?

Я пришел из фона ASP.NET, где IUSR получает разрешения только для чтения, а удостоверение пула приложений - любые разрешения на запись. Предоставление доступа на запись к IUSR обычно открывает двери для уязвимостей WebDAV. Поэтому я не решаюсь позволить PHP работать как IUSR.

Я не могу найти много людей, задающих этот вопрос (1 | 2) так что я думаю, что мне что-то не хватает. Может кто-нибудь прояснить это для меня?

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 не идеальны.

Видеть: http://www.php.net/manual/en/install.windows.iis6.php

Выдача себя за другое лицо и доступ к файловой системе

При использовании IIS рекомендуется включить олицетворение FastCGI в PHP. Это контролируется директивой fastcgi.impersonate в файле php.ini. Когда олицетворение включено, PHP будет выполнять все операции файловой системы от имени учетной записи пользователя, которая была определена аутентификацией IIS.

Согласно документации, он просто позволяет fastcgi действовать от имени клиента, используя все те же разрешения (в вашем случае это то, что выглядит как учетная запись IUSR). Другими словами, выполнять все действия, которые обычно разрешены для собственных учетных данных клиента (или пользователя). Ни больше ни меньше. Думаю, без этого набора бедный fastcgi остался бы инвалидом.