
你是否曾为 Drupal 项目的安全性担忧?尤其是在像 Acquia 这样的托管环境中,将 php 核心文件和模块代码暴露在 Web 根目录下,总让人觉得心里不踏实。万一出现配置错误或某个文件被恶意利用,后果不堪设想。我们都知道,最佳实践是尽可能地将敏感的 PHP 代码移出公开可访问的 docroot 目录,以降低远程代码执行的风险。
然而,手动实现这一目标却是一个令人头疼的难题。你需要仔细配置 Web 服务器,调整文件路径,确保 Drupal 仍然能够正常运行,并且在每次更新或安装新模块时,都要重复这些复杂的步骤。这不仅效率低下,还极易引入新的错误。
幸好,我找到了一个优雅的解决方案,它利用 composer 的强大能力,自动化地解决了这个问题:jkribeiro/drupal-composer-paranoia-acquia 插件。
Composer 插件如何化解安全难题
jkribeiro/drupal-composer-paranoia-acquia 是一个专门为 Composer-based 的 Drupal 项目设计的插件,它与 drupal-composer/drupal-paranoia 插件协同工作,旨在提升网站的安全性,特别是在 Acquia Cloud 环境下。它的核心思想是将所有 PHP 文件移出 docroot 目录,只保留必要的资产文件(如 css、js、图片)的符号链接和极少的 PHP 存根文件。
立即学习“PHP免费学习笔记(深入)”;
这个插件的出现,直接回应了社区长期以来对 Drupal 安全性的呼吁,尤其是在应对像 SA-CONTRIB-2016-039 这样的远程代码执行漏洞时,这种文件隔离策略显得尤为重要。
部署与配置:告别手动繁琐
使用 jkribeiro/drupal-composer-paranoia-acquia 插件非常简单,只需几个步骤:
-
准备项目: 确保你的 Drupal 项目是基于
drupal-composer/drupal-project构建的。 -
重命名 Web 根目录: 将你的 Acquia 仓库的
docroot目录重命名为app。<code class="bash">mv docroot app</code>
-
更新
composer.json: 在你的项目根目录下的composer.json文件中,修改extra部分,将installer-paths指向新的app目录,并添加drupal-paranoia的配置,明确app-dir和web-dir。<pre class="brush:php;toolbar:false;">"extra": { "installer-paths": { "app/core": ["type:drupal-core"], "app/libraries/{$name}": ["type:drupal-library"], "app/modules/contrib/{$name}": ["type:drupal-module"], "app/profiles/contrib/{$name}": ["type:drupal-profile"], "app/themes/contrib/{$name}": ["type:drupal-theme"], "drush/contrib/{$name}": ["type:drupal-drush"] }, "drupal-paranoia": { "app-dir": "app", "web-dir": "docroot" }, "...其他配置" } -
安装插件: 通过 Composer 将插件安装到你的项目中。
<code class="bash">composer require jkribeiro/drupal-composer-paranoia-acquia:~1</code>
-
运行安装命令: 执行以下命令,让插件完成文件结构的调整。
<pre class="brush:php;toolbar:false;">composer drupal:paranoia composer drupal:paranoia-acquia
大功告成!插件和新的 Web 根目录现在已经成功安装。
优势与实际应用效果
经过上述配置后,你的项目文件夹结构将变得更加清晰和安全:
-
app目录: 包含了完整的 Drupal 安装文件和所有 PHP 代码。这个目录将不会被 Web 服务器直接访问。 -
docroot目录: 这是一个全新的、高度受限的 Web 根目录。它只包含指向app目录中资产文件(图片、CSS、JS)的符号链接,以及一些必要的 PHP 存根文件,用于引导 Drupal 启动。
核心优势:
- 显著提升安全性: 将 PHP 代码移出 Web 根目录,大大减少了因 Web 服务器配置错误或漏洞导致的远程代码执行风险。即使攻击者设法访问
docroot目录,也无法直接执行你的核心 PHP 文件。 - 自动化管理: 每次你通过 Composer 安装或更新 Drupal 包时,
docroot目录都会自动重新创建。这意味着你无需手动维护文件路径或符号链接,大大减轻了开发和运维的负担。 - 易于维护: 如果你需要更新主题的图片、CSS 或 JS 文件,或者在某些特殊情况下需要手动重建
docroot,只需运行composer drupal:paranoia命令即可。 - 与 Acquia 环境完美融合: 这个插件专为 Acquia Cloud 环境设计,确保了在这些生产环境中的兼容性和稳定性。
最后一步,就是将这些更改提交并推送到你的 Acquia Cloud git 仓库。从此以后,你的 Drupal 项目将运行在一个更加安全、更易于管理的环境中。
通过 jkribeiro/drupal-composer-paranoia-acquia,我们不仅解决了将 PHP 文件移出 Web 根目录的难题,更重要的是,它将这一最佳实践融入了 Composer 的自动化流程,让安全不再是额外负担,而是项目构建的一部分。这无疑是 Drupal 开发者在追求更高安全性和效率道路上的一个重要里程碑。
以上就是如何使用Composer插件在Acquia环境下提升Drupal安全性:将PHP文件移出Web根目录的详细内容,更多请关注


