2005-10-18

SSL以外で接続させたくないページがあるとき

よくお買い物サイトなどで、ブラウザに鍵のマークがつくページがあると思います。
通信情報を暗号化して、途中経路での情報の漏洩を防ぐSSLという技術の使われているページです。

パスワードを使うログインページや、個人情報を入力するページがあった場合によい方法といわれています(セキュリティはいたちごっこなので完璧ではありませんが)。

では自分のあるページにアクセスするときSSL以外では接続させたくないときはどうしたらよいのでしょう。

以下はwwwサーバーがApacheであることが前提です。
もちろんSSLが使えることも必要です。レンタルサーバーを使用している場合などは、管理会社に問い合わせてみてください。
共有SSLといってそのホスティング会社のSSLを使用させてくれる場合と、独自ドメインの場合などに自分で年間の費用を払って専用SSLをつける場合とあります。

私が知ってる限りでは二つ方法があります。

1.「.htaccessファイル」に'SSLRequireSSL'を追記する

この方法をとると「.htaccess」ファイルを置いたフォルダ直下の全てのコンテンツに対してhttps://~のアクセスしか許可しなくなります。
もしhttp://~でアクセスをすると「HTTP Error 403」になります。

2. http://~にアクセスされたらhttps://~にリダイレクトする

Apatchでmod_rewriteが有効な場合に可能です。
以下の内容を.htaccessファイルに追記します。

下の例の場合は、指定したyourdirというディレクトリ全てをhttpsにリダイレクトします。
例えばhttp://www.your.com/yourdir/ は https://www.your.com/yourdir/にリダイレクトされるわけです。

RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/yourdir/(.*)?$ https://%{HTTP_HOST}/yourdir/$1 [L,R]

次の例の場合は特定のファイルの場合にhttpsへリダイレクトします。
httpsにしたいページとそうでないページが同じディレクトリに混在している場合はこれもなかなか便利です。

RewriteEngine On
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/yourdir/logon.php(.*)?$ https://%{HTTP_HOST}/yourdir/logon.php[L,R]

mod_rewriteはサーバーにかなりの負荷をかける場合があるので設置は慎重にしましょう。

#個人的には1の方法がお手軽でいいかなあ。

#2005.10.19 1の方法でhttp://~にアクセスしたとき表示されるエラーは「HTTP Error 403」でしたので修正しました。
コメントを投稿