ユーザ用ツール

サイト用ツール


ja:tips:httpslogin

HTTPS でのログインを強制する

Apache の mod_rewrite を利用すると、DokuWiki のログインで HTTPS を強制的に使用させることができ、平文のパスワードがネットワーク上に流れるのを防ぐことができます。

まず、URLの書き換えを十分に読み調べておいたほうがいいでしょう。

以下では、Wiki で HTTPS をサポートするための設定が完了しており、同じアドレスで HTTP と HTTPS のどちらからでもアクセスできるものと仮定します。パフォーマンスの理由から、ログインおよびユーザー情報の更新だけで HTTPS が強制される一方、すべての「通常の」Wiki の機能は HTTP 上で動作し続けるものとします。

HTTPS 上で提供された Cookie を HTTP 上でも動作するようにする必要があるため、まず最初に設定項目: securecookie を無効化する必要があります。それから次に .htaccess ファイルで以下のようなリダイレクト設定を行います。

# 動作モードが login、profile、admin の場合は HTTPS に切り替える
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteCond %{QUERY_STRING} do=(log|profile|admin)
RewriteRule ^(.*) https://%{HTTP_HOST}/$1 [R,QSA,L]

# 動作モード show では HTTP に戻す
RewriteCond %{HTTPS} on
RewriteCond %{QUERY_STRING} (do=show|^$)
RewriteCond %{REQUEST_METHOD} GET
RewriteRule ^(.*) http://%{HTTP_HOST}/$1 [R,QSA,L]

サーバ名が SSL 証明書の中のホスト名にマッチする場合は ${HTTP_HOST}${SERVER_NAME} に変更したほうが良いかもしれません。

注意: 上記の設定では、動作モード show だけを HTTP に戻します。これはログイン直後に HTTPS から HTTP に切り替わらない可能性があることを意味しますが、SSL 上での操作中に SSL と非 SSL の「コンテンツの混在」の警告が出ないことを保証します。

  • 注意: 上記のコードを動作させるためには、/conf/local.php で “securecookie” を無効化する必要があります。そうしておかないと、ログインがうまく登録されません。これは、securecookie が有効化されていると HTTP 上ではセッション Cookie が Web ブラウザから送信されなくなり、セッションが失われてしまうためです。
ja/tips/httpslogin.txt · 最終更新: 2017/01/12 by N_Miya