Verzeichnisse nur über SSL erreichbar machen - und das benutzerfreundlich!

Die Anforderung:
Ein Verzeichnis auf einem Apache-Webserver (genauer das Admin-Frontend von Django) sollte nur via SSL erreichbar sein. Wenn jemand via HTTP auf (schützenswerte) Unterverzeichnisse zugreift, dann soll er "passend" umgleitet werden. Letztendlich kommt noch dazu, dass dieser Location-Container mit vielen anderen Einstellungen per Include-Anweisung in 2 virtuelle Hosts (HTTP und HTTPS) geladen wird. Für einige ist es OK, dass sie sowohl per HTTP als auch HTTPS ausgeliefert werden, für andere eben nicht. Da neben Django noch mehrere Tools auf diesem Web-Server laufen, gibt's dafür einen extra Location-Container:

<Location "/admin/">
  SetHandler              python-program
  PythonHandler           django.core.handlers.modpython
  PythonPath              "['/PFAD/ZUM/PROJECT/'] + sys.path"
  PythonAutoReload        On
  SetEnv                  DJANGO_SETTINGS_MODULE  PROJEKT.settings
</Location>

Lösung 1:
Im Modul mod_ssl gibt es die Direktive SSLRequireSSL On, mit der man sicherstellen kann, dass es eben nur via SSL ausgeliefert wird.
Nachteil: Kommt ein Benutzer via HTTP bekommt er nur "Du kummst hier net rein!". Effektiv, aber nicht wirklich schön.

<Location "/admin/">
  SetHandler              python-program
  PythonHandler           django.core.handlers.modpython
  PythonPath              "['/PFAD/ZUM/PROJECT/'] + sys.path"
  PythonAutoReload        On
  SetEnv                  DJANGO_SETTINGS_MODULE  PROJEKT.settings

  SSLRequireSSL           On
</Location>

Lösung 2:
Mit Hilfe von mod_rewrite bzw. dessen Direktiven RewriteCond und RewriteRule wird getestet, ob die Anfrage per HTTP kam und wenn ja an die selbe URL nur mit HTTPS weitergeleitet:

<Location "/admin/">
  SetHandler        python-program
  PythonHandler     django.core.handlers.modpython
  PythonPath        "['/PFAD/ZUM/PROJECT/'] + sys.path"
  PythonAutoReload  On
  SetEnv            DJANGO_SETTINGS_MODULE  PROJEKT.settings

  RewriteEngine     On
  RewriteCond       %{HTTPS}    off
  RewriteRule       .*          https://%{HTTP_HOST}/%{REQUEST_URI}
</Location>

Et voilà! ;-)

Trackback URL for this post:

http://velt.de/trackback/229

Kommentar hinzufügen

Der Inhalt dieses Feldes wird nicht öffentlich zugänglich angezeigt.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Zeilen und Absätze werden automatisch erzeugt.
  • You may link to Gallery2 items on this site using a special syntax.

Weitere Informationen über Formatierungsoptionen

To combat spam, please enter the code in the image.
Inhalt abgleichen
Powered by Olark