zwd5168 发表于 2023-12-10 11:23:53

配置步骤 3:配置 PHP 应用程序安全性



在此生成 IIS 上的 PHP 网站的最后一步中,你将会配置提升网站安全的 PHP 设置、Web 服务器设置和 PHP 应用程序设置。


3.1. 配置 PHP 安全设置
以下过程将显示如何在 php.ini 文件中配置 PHP 设置。 有关安全相关的 PHP 设置的信息,请参阅 3.1。用于安全性的 PHP 配置设置。配置 PHP 安全设置

[*]在 Windows 资源管理器中,打开 PHP 安装文件夹,例如 C:\PHP。
[*]在文本编辑器中,打开 php.ini 文件。
[*]搜索你想要更改设置的文件。如果设置标有注释(行以分号 [;] 开头),请删除该分号并设置值。 如果找不到设置,请将行添加到文件的末尾。
[*]保存并关闭 php.ini 文件。
[*]回收 PHP 的 IIS 应用程序池,以拾取配置更改。

3.2. 配置 Web 服务器和 PHP 应用程序安全性
本部分显示如何为 IIS 配置若干 Web 服务器和应用程序设置。 这些设置包括隔离 Web 应用程序、启用每个站点 PHP 配置和使用请求筛选。 隔离 Web 应用程序
实现以下建议,在服务器上隔离网站和 Web 应用程序。
[*]对每个网站或 Web 应用程序使用一个应用程序池。
[*]限制针对应用程序池标识的站点文件夹和文件的访问权限。
[*]设置每个站点单独的 PHP 临时文件夹,并仅为应用程序池标识授予访问权限。
[*]请确保在只允许访问到应用程序池标识的每个站点根上设置 ACL(访问控制列表)。
如果每个应用程序池具有多个应用程序,请考虑创建足够的应用程序池并将一些应用程序移动到新的池。创建应用程序池

[*]打开 IIS 管理器。
[*]在“连接”窗格中,单击“应用程序池”。
[*]在“操作”窗格中,单击“添加应用程序池”。
[*]在“名称”框中,键入应用程序池的唯一名称。
[*]在“.NET Framework 版本”下,选择“无托管代码”。
[*]选择“托管管道模式”。 推荐“集成”模式。
[*]单击 “确定” 。
将应用程序移动至另一个应用程序池

[*]打开 IIS 管理器。
[*]在“连接”页面中,选择你想要移动的网站或 Web 应用程序。
[*]在“操作”窗格中,单击“基本设置”。
[*]在“编辑站点”对话框上单击“选择”,打开“选择应用程序池”对话框,然后选择“应用程序池”菜单中的应用程序池。
[*]单击“确定”关闭“选择应用程序池”对话框,单击“确定”关闭“编辑站点”菜单。
将应用程序池标识添加到某个文件夹或某个文件 ACL

[*]打开 Windows 资源管理器并导航到该文件夹或文件。
[*]右键单击该文件夹或文件,然后单击“属性”。
[*]选择“安全”选项卡,然后单击“编辑”。
[*]依次单击“添加”、“位置”,并且选择要作为位置进行搜索的服务器。
[*]在“输入要选择的对象名称”框中,键入 IIS APPPOOL\applicationPoolName,其中 applicationPoolName 是应用程序池标识。
[*]依次单击“确定”、“确定”并再次单击“确定”,关闭对话框。
启用每个站点 PHP 配置
如果 IIS Web 服务器上具有多个 PHP 应用程序,可以通过为每个应用程序配置 PHP 进程池和 php.ini 文件,提高安全性。 本部分介绍如何使用 applicationHost.config 文件配置进程池和多个 pnp.ini 文件。每个站点的 PHP 进程池
当每个网站都具有自己的应用程序池(这是在 IIS 上的推荐做法)时,可以将专用 FastCGI 进程池与每个网站关联。 此关联在 applicationHost.config 文件的 fastCgi 部分中完成。 FastCGI 进程池是由 application 元素的 fullPath 和 arguments 特性的组合来唯一标识的。 若要为相同的进程可执行文件(如 php-cgi.exe)创建多个 FastCGI 进程池,请使用 arguments 特性来区分进程池定义。 通过 php-cgi.exe 进程,使用命令行开关“-d”定义 PHP 进程的 INI 条目。 并使用此开关设置使参数字符串独一无二的 PHP 设置。例如,如果两个网站(“website1”和“website2”)必须要具有自己的 PHP 设置集,请按照以下方法定义 FastCGI 进程池:<fastCgi>
<application fullPath="C:\PHP\php-cgi.exe"
    arguments="-d open_basedir=C:\Websites\Website1" />
<application fullPath="C:\PHP\php-cgi.exe"
    arguments="-d open_basedir=C:\Websites\Website2" />
</fastCgi>

在此示例中,PHP 设置 open_basedir 用于区分进程池之间的定义。 该设置还将强制每个进程池的 PHP 可执行文件要仅在相应网站的根文件夹中执行文件操作。因此,website1 PHP 处理程序映射将如下所示:<system.webServer>
<handlers accessPolicy="Read, Script">
    <add name="PHP via FastCGI"
      path="*.php" verb="*"
      modules="FastCgiModule"
      scriptProcessor="C:\PHP\php-cgi.exe|-d open_basedir=C:\Websites\Website1"
      resourceType="Unspecified"
      requireAccess="Script" />
</handlers>
</system.webServer>

并且,website2 PHP 处理程序映射将如下所示:
<system.webServer>
<handlers accessPolicy="Read, Script">
    <add name="PHP via FastCGI"
      path="*.php" verb="*"
      modules="FastCgiModule"
      scriptProcessor="C:\PHP\php-cgi.exe|-d open_basedir=C:\Websites\Website2"
      resourceType="Unspecified" requireAccess="Script" />
</handlers>
</system.webServer>

PHP 进程启动时,它将使用多种设置确定配置 php.ini 文件的位置。 PHP 进程搜索 php.ini 位置的地方之一是 PHPRC 环境变量。 如果 PHP 进程在由此环境变量指定的路径中找到了 php.ini 文件,它将使用该文件。 否则,PHP 进程将恢复为使用 php.ini 文件的默认位置。 此环境变量可用于允许宿主客户使用他们自己的 php.ini 文件版本。例如,如果两个网站(“website1”和“website2”)位于以下文件路径:C:\WebSites\website1 和 C:\WebSites\website2,你可以在 applicationHost.config 文件的 fastCgi 部分配置 php-cgi.exe 进程池,方法如下所示:<fastCgi>
<application fullPath="C:\PHP\php-cgi.exe" arguments="-d open_basedir=C:\Websites\Website1">
    <environmentVariables>
      <environmentVariable name="PHPRC" value="C:\WebSites\website1" />
    </environmentVariables>
</application>
<application fullPath="C:\PHP\php-cgi.exe" arguments="-d open_basedir=C:\WebSites\Website2">
    <environmentVariables>
      <environmentVariable name="PHPRC" value="C:\WebSites\website2" />
    </environmentVariables>
</application>
</fastCgi>

如此,website1 可以拥有位于 C:\WebSites\website1的自己的 php.ini 文件版本,而 website2 也可以拥有位于 C:\WebSites\website2的自己的 php.ini 文件版本。 此配置还可以确保如果没有在 PHPRC 环境变量中指定的位置找到 php.ini 文件,PHP 将会使用与 php-cgi.exe 相同位置的文件夹中的默认 php.ini 文件。

页: [1]
查看完整版本: 配置步骤 3:配置 PHP 应用程序安全性