我应该通过 FastCGI 模拟 PHP 吗?

Wim*_*mer 17 php fastcgi iis-7.5 impersonation iusr

我正在通过 FastCGI 将最新版本的 PHP 安装到 IIS 7.5 上,所有说明都说 FastCGI 应该通过设置来模拟调用客户端

 fastcgi.impersonate = 1
Run Code Online (Sandbox Code Playgroud)

如果我的网站会有这个配置

  • 专用应用程序池
  • ApplicationPoolIdentity 的应用程序池标识
  • 仅匿名身份验证(如 IUSR)

我为什么要冒充?

我来自 ASP.NET 背景,其中 IUSR 获得只读权限,应用程序池标识获得任何写入权限。授予对 IUSR 的写访问权限通常为 WebDAV 漏洞打开大门。所以我犹豫要不要让 PHP 作为 IUSR 运行。

我找不到很多人问这个问题 ( 1 | 2 ) 所以我想我一定遗漏了一些东西。有人可以为我澄清这一点吗?

Wim*_*mer 19

13 个月后,我想重新审视我自己的问题。在那段时间里,我将六个网站从 IIS 6 转移到了 IIS 7.5,并使用我喜欢的方法配置了它们。我只能说这些网站可以正常工作,它们没有任何安全问题(不是因为这些是流行网站),而且在我看来,设置比 learn.iis.net 推荐的更安全。

对于后代,这里是相关设置。在 PHP INI 中:

cgi.force_redirect = 0
cgi.fix_pathinfo=1
fastcgi.impersonate = 0
Run Code Online (Sandbox Code Playgroud)

在 IIS 中:

  • 应用程序池 > 身份 > ApplicationPoolIdentity
  • 网站 > 认证 > 匿名认证 > 特定用户:IUSR

NTFS 权限以及应用它们的位置:

  • IUSR - 授予读取,拒绝写入
    • IIS 网站的根目录。例如,在 Zend Framework 项目中,这将是 /public 目录。
    • 如果您的应用程序上传文件并将其保存在公共目录中,则您需要将此权限应用于临时上传目录。这是因为move_uploaded_file会保留上传目录的权限。这是我发现的此权限设置的最大缺点。
  • ApplicationPoolIdentity ( IIS AppPool\<<YourApplicationPoolName>>) - 授予读取和列表
    • PHP 应用程序的根目录。例如,在 Zend Framework 项目中,这将是整个项目。
    • 您的应用程序包含但不在应用程序文件夹中的任何外部库(Zend、Doctrine 等)。
  • ApplicationPoolIdentity - 授予修改
    • 任何位置在您的应用程序会写,如upload_tmp_dirsession.save_patherror_log
    • 有时我需要将此权限添加到我的开发环境中 PHP 应用程序的根目录,以支持Doctrine 的自动生成代理等功能
  • ApplicationPoolIdentity - 授权列表
    • 如果您的应用程序位于虚拟目录中,则需要将此权限添加到网站的根目录。这允许您的应用程序读取其父 web.config。例如,如果您的应用程序根目录是http://example.com/MyPHPApp,请在 example.com Web 目录上设置此权限。具体来说你只需要申请“这个文件夹和文件”,“只在这个容器内”。

我希望这可以帮助任何其他认为 learn.iis.net 说明不理想的人。