在開發(fā)drupal項目時,如果將vendor目錄放在http服務器的docroot中,可能會面臨安全風險。這是因為vendor目錄中可能包含一些可執(zhí)行文件和測試目錄,如果不加以處理,可能會被惡意利用。最近,我在處理一個drupal項目時遇到了這個問題,嘗試了多種方法來增強安全性,但效果不佳。
最后,我發(fā)現(xiàn)了drupal/core-vendor-hardening這個composer插件,它專門用于解決這個問題。這個插件可以自動清理vendor目錄中的多余目錄,特別是那些可能包含可執(zhí)行文件的測試目錄。它還會在vendor目錄的根目錄添加一個.htaccess文件,以防止web服務器直接訪問vendor目錄中的文件。
使用drupal/core-vendor-hardening非常簡單,只需在你的項目中通過Composer安裝它:
composer require drupal/core-vendor-hardening
安裝或更新時,這個插件會自動檢查每個包,并移除它所知道的多余目錄。對于Drupal核心包,這個插件已經(jīng)預設了清理規(guī)則。如果你需要清理其他包,可以在composer.json的extra字段中進行配置。例如:
"extra": { "drupal-core-vendor-hardening": { "vendor/package": ["test", "documentation"] } }
上述配置會告訴插件在安裝或更新vendor/package包時,移除其test/和documentation/目錄。
對于通過composer/installers安裝在vendor目錄之外的包,你也可以配置插件進行清理。例如,對于一個名為drupal/module_name的Drupal模塊包,可以這樣配置:
"extra": { "drupal-core-vendor-hardening": { "drupal/module_name": ["tests", "src/Tests"] } }
這會讓插件嘗試移除web/modules/contrib/module_name/tests和web/modules/contrib/module_name/src/Tests目錄。
使用drupal/core-vendor-hardening插件,不僅大大增強了我的Drupal項目的安全性,還簡化了配置過程。這個插件的優(yōu)勢在于它自動化了清理過程,并且可以通過簡單配置擴展到其他包。實際應用中,它顯著提高了項目的安全性,使我能夠更放心地將vendor目錄放在docroot中。