web-dev-qa-db-ja.com

/ user / loginをHTTPSにリダイレクトし、他のすべての要求をHTTPにリダイレクトします

Drupal 7.を使用しています。ユーザーのログインページは/ user/loginにあるため、デフォルトのログインパスです。このページはSSLを使用して暗号化する必要があるため、人々はパスワードを平文で送信する。

Apacheを構成して、サイトをHTTPまたはHTTPSのいずれかでナビゲートできるようにしました。ただし、/ user/login以外のすべてのリクエストがHTTP経由で行われるように、いくつかの書き換えルールを実装したいと考えています。これは、INFINITELYがより速くなり、ユーザーエクスペリエンスが向上するためです。 Drupal Coreのサポートにバグがあり、手動でCoreにパッチを適用しないため、現時点では Secure Pages の使用を拒否します。つまり、 mは、Apacheリライトルールの使用を残しました。

私には次のルールがあります。

<VirtualHost *:80>
  ...
  RewriteCond %{HTTPS} off
  RewriteCond %{REQUEST_URI} ^/user/login$
  RewriteRule ^/(.*) https://%{HTTP_Host}/$1 [L,R]
  ...
</VirtualHost>

<VirtualHost *:443>
  ...
  RewriteCond %{HTTPS} on
  RewriteCond %{REQUEST_URI} !^/user/login$
  RewriteRule ^/(.*) http://%{HTTP_Host}/$1 [L,R]
  ...
</VirtualHost>

今、私にはそれは理にかなっていますが、Drupalはそれが好きではないようです。

何が起こっているのですか?

  1. HTTPを使用してサイト内を/ user/login以外のページに移動すると、問題なく動作します。
  2. HTTP経由で/ user/loginに移動すると、フロントページにリダイレクトされます。
  3. HTTPS経由で任意のページに移動すると、HTTP経由でフロントページにリダイレクトされます。
7
Lester Peabody

/ user/loginをhttps経由で提供する必要はありません。 https経由で送信するユーザーログインフォームが必要です。

Securepages_prevent_Hijackモジュールを確認してください。securepagesに依存しているため、直接使用するのではなく、ログインフォームがどのように変更されるかを確認してください。そのようです:

function securepages_prevent_Hijack_form_alter(&$form, &$form_state, $form_id) {
  // Secure the login form, so that we always have a secure connection to transmit the
  // initial cookie.  Also, protect the password in transit.
  if ($form['#id'] == 'user-login-form' || $form['#id'] == 'user-login') {
    $url = parse_url($form['#action']);

    $base_path = base_path();
    $path = (!strncmp($url['path'], $base_path, drupal_strlen($base_path)) ? drupal_substr($url['path'], drupal_strlen($base_path)) : $url['path']);
    $options = array('secure' => TRUE);
    if (isset($url['query'])) {
      $options['query'] = $url['query'];
    }
    $form['#action'] = securepages_url($path, $options);
  }
}

Drupalが設定しているCookieが安全かどうかも確認する必要があります。これはphp.iniの設定によって異なります。session.cookie_secureを1.使用している場合、Cookieはhttpセッションに送信されません。そのため、ホームページに戻ります(セッションCookieなし==セッションなし==ログイン情報なし==ログアウト)。もちろん、session.cookie_secureが0の場合、他のパーティが転送中のセッションCookieを観察し、ユーザーになりすます可能性があります。すでにこのリスクを考慮している可能性がありますが、考慮事項があります。

8
greg_1_anderson

Secure Login モジュールもコアをハックすることなく、必要なことを実行できると思います。

セキュアログインモジュールを使用すると、ユーザーログインやその他のフォームをHTTPS経由で安全に送信できるため、パスワードやその他のプライベートユーザーデータがクリアテキストで送信されなくなります。

4
user785179

私はあなたが Secure Pages をもう一度試すことができると思います。それ以来、彼らは新しい安定版をリリースしています。

Drupal 8の場合: Secure Login モジュールを確認してください。

参照: HTTPセキュア(HTTPS)の有効化

2
kenorb