it-swarm.com.de

Leiten Sie / user / login zu HTTPS um, alle anderen Anforderungen zu HTTP

Ich verwende Drupal 7. Die Anmeldeseite für meine Benutzer befindet sich unter/user/login, also dem Standard-Anmeldepfad. Diese Seite muss mit SSL verschlüsselt werden, damit die Benutzer dies nicht tun Übermittlung ihrer Passwörter im Klartext.

Ich habe Apache so konfiguriert, dass die Site entweder über HTTP oder HTTPS navigiert werden kann. Ich möchte jedoch einige Umschreiberegeln implementieren, damit alle Anforderungen außer/user/login über HTTP gestellt werden, da dies UNENDLICH schneller ist und zu einer besseren Benutzererfahrung führt. Ich lehne es ab, Secure Pages zu diesem Zeitpunkt zu verwenden, da die Unterstützung in Drupal Core fehlerhaft ist und ich Core nicht manuell patchen werde. Das bedeutet, dass ich ' Ich habe noch Apache-Regeln zum Umschreiben verwendet.

Ich habe folgende Regeln:

<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>

Für mich macht das Sinn, aber Drupal scheint es nicht zu mögen.

Was passiert ist wie folgt:

  1. Wenn ich mit HTTP zu einer anderen Seite als/user/login auf der Site navigiere, funktioniert dies einwandfrei.
  2. Wenn ich über HTTP zu/user/login navigiere, werde ich zur Startseite weitergeleitet.
  3. Wenn ich über HTTPS zu einer Seite navigiere, werde ich über HTTP zur Startseite weitergeleitet.
7
Lester Peabody

Sie brauchen/user/login nicht wirklich, um über https bedient zu werden. Sie müssen das Benutzeranmeldeformular über https senden.

Sie sollten sich das Modul Securepages_prevent_Hijack ansehen - nicht, um es direkt zu verwenden, da es von Securepages abhängt, sondern um zu sehen, wie das Anmeldeformular geändert wird. Wie so:

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);
  }
}

Sie sollten auch herausfinden, ob das Cookie, das Drupal für Sie einstellt, sicher ist oder nicht). Dies hängt von Ihren Einstellungen in php.ini ab. Überprüfen Sie, ob Sie session.cookie_secure auf gesetzt haben 1. Wenn ja, wird das Cookie nicht an Ihre http-Sitzungen gesendet, weshalb Sie möglicherweise wieder auf der Startseite landen (kein Sitzungscookie == keine Sitzung == keine Anmeldeinformationen == abmelden) Wenn die session.cookie_secure 0 ist, können andere Parteien möglicherweise Ihre Sitzungscookies während der Übertragung beobachten und sich als Ihre Benutzer tarnen. Vielleicht haben Sie dieses Risiko bereits in Betracht gezogen, aber es muss berücksichtigt werden.

8
greg_1_anderson

Ich denke, das Secure Login Modul wird auch tun, was Sie wollen, ohne dass Sie den Kern hacken müssen.

Das Modul "Sichere Anmeldung" ermöglicht die sichere Übermittlung der Benutzeranmeldung und anderer Formulare über HTTPS, wodurch verhindert wird, dass Kennwörter und andere private Benutzerdaten im Klartext übertragen werden.

4
user785179

Ich denke, Sie können Secure Pages erneut versuchen, da sie seitdem die neue stabile Version veröffentlicht haben.

Überprüfen Sie für Drupal 8): Secure Login Modul.

Siehe auch: Aktivieren von HTTP Secure (HTTPS) .

2
kenorb