为啥在 IIS 上使用 open_basedir 和 PHP 作为 FastCGI?

Posted

技术标签:

【中文标题】为啥在 IIS 上使用 open_basedir 和 PHP 作为 FastCGI?【英文标题】:Why use open_basedir with PHP as FastCGI on IIS?为什么在 IIS 上使用 open_basedir 和 PHP 作为 FastCGI? 【发布时间】:2014-12-04 09:53:28 【问题描述】:

我看过一些解释 IIS 下 php 安装的教程,因为 FastCGI 建议将 open_basedir 设置为指向网站内容所在的文件夹或网络路径。

当我在我的应用服务器上设置 open_basedir 时,管理文件时出现以下错误: 警告:open_basedir 限制生效。文件(C:\Windows\Temp\php92E7.tmp) 不在允许的路径内:(C:\inetpub\wwwroot)

我知道我可以在 inetpub 下设置一个临时目录,但我不明白为什么使用 windows\temp 会出现问题。

PHP 作为 IIS 上的 FastCGI 是否存在任何安全漏洞,需要 open_basedir 限制? 如果不是,为什么推荐它?还是没有必要?是否可以使用具有正确权限的 AppPool Identity 获得 open_basedir 优势?

【问题讨论】:

您真的希望能够在 Web 根目录之外安装可执行文件吗? 【参考方案1】:

设置 open_basedir(不仅在带有 IIS 的 Windows 上,而且在任何 Web 服务器上的任何平台上)是一种安全措施,用于限制您的应用程序可以读取、写入、和包含的文件。

PHP 可以从文件系统的任何位置包含任何带有 PHP 代码的文件,这并不是一个真正的安全漏洞,但它是一个特性。例如,您可能在 Web 根目录中有一些文件,而在 Web 根目录之外有其他文件(Web 服务器无法访问它们,但 PHP 可以访问它们)。

但是,如果您的程序存在缺陷,您的用户可能能够读取或包含(甚至写入)不属于您的应用程序的文件。这些可能是系统文件、用户上传的文件或其他应用程序的文件。这就是为什么 open_basedir 很重要。

请注意,在设置 open_basedir 之后,还要设置其他 PHP 函数的路径(例如,upload_tmp_dir),因为它们也应该在 open_basedir 路径下。

【讨论】:

以上是关于为啥在 IIS 上使用 open_basedir 和 PHP 作为 FastCGI?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 IIS 会转到 wwwroot 文件夹而不是我想要的文件夹?

为啥在 IIS7 中调试会一直超时?

为啥 Azure Web 角色上的 IIS 需要如此频繁地重新编译 ASP.NET 应用程序?

为啥我的 MySQL 数据库在 Windows IIS 6 上崩溃并出现 VMWARE 错误 1784

nginx+php使用open_basedir限制站点目录防止跨站

php绕过open_basedir设置