drupal-composer / drupal-paranoia
Composer 插件,通过将所有 PHP 文件移动到 docroot 外部,提高基于 composer 的 Drupal 项目的安全性。
Requires
- php: >=5.4.5
- composer-plugin-api: ^1.1 || ^2
Requires (Dev)
- composer/composer: dev-master
This package is auto-updated.
Last update: 2024-08-29 04:14:43 UTC
README
Drupal Paranoia
Composer 插件,通过将所有 PHP 文件移动到 docroot 外部,提高基于 composer 的 Drupal 网站的网站安全性。
为什么使用此插件?
Coder 的关键安全问题是一个很好的例子,考虑将 PHP 文件移出 docroot。
更多相关链接
需求
除了 Windows 之外,此插件应在具有 Composer 支持的环境上工作。您使用 Windows 吗?帮助我们。
安装
确保您已创建一个基本的 drupal-composer/drupal-project 项目。
将当前 docroot 目录重命名为 /app
。
cd drupal-project-root
mv web app
使用以下值更新您的根包的 composer.json
"extra": { "drupal-paranoia": { "app-dir": "app", "web-dir": "web" }, "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"] } }
解释
- /app 文件夹:Drupal 完整安装。
- /web 文件夹:将仅包含来自
/app
文件夹的资产文件和 PHP 桩文件(index.php、install.php 等)的符号链接。
使用 composer require ...
在您的项目上安装此插件。
composer require drupal-composer/drupal-paranoia:~1
完成!插件和新 docroot 已安装。
资产文件类型
资产文件从 /app
符号链接到 /web
文件夹。
默认资产文件类型由插件提供
robots.txt
.htaccess
*.css
*.eot
*.ico
*.gif
*.jpeg
*.jpg
*.js
*.map
*.otf
*.png
*.svg
*.ttf
*.woff
*.woff2
要扩展资产文件类型列表,您可以使用 asset-files
配置
"extra": { "drupal-paranoia": { "app-dir": "app", "web-dir": "web", "asset-files": [ "somefile.txt", "*.md" ] }, "..." }
如果您需要修改列表,您可以使用 post-drupal-set-asset-file-types
事件
"scripts": { "post-drupal-set-asset-file-types": [ "DrupalProject\\composer\\ScriptHandler::setAssetFileTypes" ], "..." },
<?php /** * @file * Contains \DrupalProject\composer\ScriptHandler. */ namespace DrupalProject\composer; use DrupalComposer\DrupalParanoia\AssetFileTypesEvent; class ScriptHandler { public static function setAssetFileTypes(AssetFileTypesEvent $event) { $asset_file_types = $event->getAssetFileTypes(); // Do what you want with the asset file types. $event->setAssetFileTypes($asset_file_types); } }
根据此插件的目的,以下文件类型是 不允许的,如果列出,则将被忽略
*.inc
*.install
*.module
*.phar
*.php
*.profile
*.theme
排除路径
使用 drupal-paranoia 选项排除,您可以提供不应符号链接或桩到 /web
文件夹的路径。默认情况下,插件不提供排除项。
"extra": { "drupal-paranoia": { "app-dir": "app", "web-dir": "web", "excludes": [ "core/install.php", "sites/simpletest" ] }, "..." }
注意: 考虑排除 /install.php
。当此 URL 公开时,存在安全问题,它可以用来创建网站上现有贡献模块的列表。您可以通过如上所述的插件或通过 .htaccess
规则来排除它。
Web 服务器 docroot
将您的 Web 服务器文档根配置更改为指向 /web
文件夹。
插件事件
在此插件执行过程中,它会触发以下命名事件
- drupal-paranoia-post-command-run:在执行
drupal:paranoia
命令后发生。
事件订阅者示例
<?php namespace MyVendor; use Composer\Composer; use Composer\EventDispatcher\EventSubscriberInterface; use Composer\IO\IOInterface; use Composer\Plugin\PluginInterface; use DrupalComposer\DrupalParanoia\PluginEvents as DrupalParanoiaPluginEvents; class MyClass implements PluginInterface, EventSubscriberInterface { protected $composer; protected $io; public function activate(Composer $composer, IOInterface $io) { $this->composer = $composer; $this->io = $io; } public static function getSubscribedEvents() { return array( DrupalParanoiaPluginEvents::POST_COMMAND_RUN => 'postDrupalParanoiaCommand', ); } public function postDrupalParanoiaCommand(CommandEvent $event) { // Add your custom action. } }
本地开发
每次您通过 Composer 安装或更新 Drupal 包时,/web
文件夹都会被重新创建。
composer require drupal/devel:~1.0
> drupal-paranoia: docroot folder has been rebuilt.
当处理主题、CSS 和 JS 等时,可能需要手动重建文件夹以符号链接新资产。
composer drupal:paranoia
公共文件
此插件假定公共文件文件夹位于 app/sites/<site>/files
,并且创建了符号链接 web/sites/<site>/files -> ../../../app/sites/<site>/files
。