Trusted Host 設定
このドキュメントは 未完成 です。 情報を追加してください。
HTTP HOST ヘッダー攻撃からの保護(サイトが自分を別のサイトだと思い込まないように)
Drupal 7 では、ユーザーに直接公開されていないものの、しばしば poormanscron と呼ばれるコア機能が導入されました。これは、ログのクリーニング、メールの送信、キャッシュのクリアといった、Drupal サイトの定期的なタスクをトリガーします。動的なベース URL 検出(Drupal 4.7 で追加)と組み合わさると、これは問題のある動作を引き起こす可能性があります。この記事では、それらのシナリオと、それを軽減するために何ができるかを概説します。
シナリオ 1:誤ったドメインでユーザーにメールを送信する
これは、別のドメインをサイトの IP アドレスに向け(たとえば other-site.example.org を www.example.com に向ける)、/user/password にアクセスすることで再現できます。システムは、パスワードリセットのメールで other-site.example.org をベース URL として使用します。これは混乱を招き、さらに悪くすると:
- 悪意のある人物がパスワードリセットのリンクを傍受する可能性があります。
- ユーザーがなりすましドメインに認証情報を入力し、フィッシング攻撃のリスクにさらされる可能性があります。
シナリオ 2:キャッシュされたページに誤ったドメインが含まれる
(誤ってルーティングされたリクエストによって)誤ったドメインを使ってキャッシュエントリが作成されると、将来のユーザーに誤った URL が提供される可能性があります。Drupal コアのページキャッシュはこれを回避しますが、コントリビュートモジュールは回避しないかもしれません。
シナリオ 3:誤ったドメインを含むメール通知
誤ったドメインを介して行われたリクエスト中に poormanscron がメール送信をトリガーすると、それらのメールには無効なリンクが含まれ――ここでもユーザーを混乱させます。
動的なベース URL の混乱に対する解決策
次のアプローチの 1 つ以上を選んでください:
sites/default/settings.phpで固定の$base_urlを設定します。sites/example.com/settings.phpのようなドメイン固有のsettings.phpファイルを使います。- 認識されないドメインにはエラーページで応答するよう Web サーバーを設定します。
- サーバー設定を介して、不明なすべてのドメインを正しいドメインにリダイレクトします。
Drupal 8 の Trusted Host セキュリティ設定
2015 年 1 月時点で、Drupal 8 は正規表現を使った「trusted host patterns(信頼できるホストパターン)」 を settings.php でサポートしています:
$settings['trusted_host_patterns'] = [
'^www\.example\.com$',
];
ローカル開発では、必要に応じて '^localhost$' を含めます。
MAMP 3 の Trusted Host
$settings['trusted_host_patterns'] = [
'^drupal8$',
];
注意:MAMP 4.2 は '^localhost$' をサポートします。
Acquia Dev Desktop 2 の Trusted Host
$settings['trusted_host_patterns'] = [
'^sitename\.dd$',
];
XAMPP の Trusted Host
$settings['trusted_host_patterns'] = [
'^localhost$',
'^192\.168\.00\.52$',
'^127\.0\.0\.1$',
];
マルチサイトインストールで使われるすべてのドメインが記載されていることを確認してください。
Lando の Trusted Host
$settings['trusted_host_patterns'] = [
'^'.getenv('LANDO_APP_NAME').'\.lndo\.site$',
'^localhost$',
'^'.getenv('LANDO_APP_NAME').'\.localtunnel\.me$',
'^192\.168\.1\.100$',
];
ヒント:Lando は、使用できる追加の環境変数を公開しています。phpinfo() を確認するか、次を使ってください:
$lando_info = json_decode(getenv('LANDO_INFO'), TRUE);