私は、ユーザーがサイトでグループを作成できるようにする Groups モジュールを使用するサイトで作業しています。その後、サイトはユーザーがサイトでカスタムドメイン名をポイントできるようにし、グループのコンテンツをそのドメインで利用できるようにします。
信頼できるホストパターンを除いて、これを設定しました。現時点では、ドメインを_$settings['trusted_Host_patterns']
_の_settings.php
_に手動で追加する必要があります。これを手動で処理する必要はありませんが、データベースのフィールドに格納されているドメイン名に基づいて、これらの信頼できるホストパターンを動的に設定したいと考えています。
私はDrupalKernel::initializeSettings()
を見ていましたが、設定を上書きするメソッドが存在しないようです:
_// Initialize our list of trusted HTTP Host headers to protect against
// header attacks.
$Host_patterns = Settings::get('trusted_Host_patterns', []);
if (PHP_SAPI !== 'cli' && !empty($Host_patterns)) {
if (static::setupTrustedHosts($request, $Host_patterns) === FALSE) {
throw new BadRequestHttpException('The provided Host name is not valid for this server.');
}
}
_
ですから、カーネルイベントを使用して、信頼できるホストパターンが呼び出される前に信頼できるホストパターンを設定に追加できると思いますが、信頼できるホストが前に設定されているため、データベース接続が初期化されているため、DB変数から信頼できるホストパターンを設定できません。
誰かがこれを回避する方法のアイデアを持っていますか?
設計上、Drupal内の信頼できないホストからデータベースにアクセスすることはできません。カーネルは、設定がファイルから読み取られるときにトラステッドホストパターンをチェックしますが、設定がないと、データベース接続を開くための資格情報がありません。
これを回避する方法はたくさんあります。 @NoSssweatによるコメントで述べたように、信頼できるホストをファイルに書き込み、そのファイルをsettings.phpに含めることができます。または、Drupalの外からデータベースにアクセスして、これを呼び出すPHP settings.phpのスクリプト。次に、データベースが使用可能なときに、カーネルイベントサブスクライバーのカスタムドメイン名に対して2番目のチェックを追加することにより、セキュリティを強化します。