はじめに
GitHub Pages などの静的ホスティングサービスでサーバを自由にいじれない環境でもパスワードをつける方法です。
デモ
パスワードは password
概要
GitHub Pages などの静的ホスティングでサーバの設定ができない場合、パスワードによる制限をつけることが難しいです。
それでも、パスワードによって閲覧を制限したい場合に、今回の方法が使えます。
簡単な説明をするとパスワードによって制限したいページをハッシュ化された文字列の名前を持つディレクトリに入れることで、URI を用いた認証をつけます。
これにより、パスワードを知っている人のみがページへアクセスすることができます。
仕組みの詳細
パスワードの入力
あらかじめ正解のパスワードが入力された場合のハッシュ値( デモサイトでは SHA-256 を使用 )をそのままアクセスされるディレクトリの名前にしておきます。
訪問者はパスワード入力ページでパスワードを入力します。
パスワードが入力されたら、JavaScript でハッシュ化( ライブラリは jsSHA を使用してます )し、XMLHttpRequest を利用してハッシュ値の名前を持つディレクトリの存在を確認します。
正常なレスポンスが返されればアクセスに成功とし、遷移します。
そうでない場合は、再入力を促します。
詳細なコードはリポジトリにある index.html を見れば全てわかります。
セキュリティ
( 専門ではないので間違いがある可能性があります。 )
上記の仕組みを見れば分かる通り、URI の存在を確認しているだけなので、それを知られるとパスワード無しで閲覧できてしまいます。
なので、ディレクトリリスティングの設定や noindex などを利用して、リンクを知られないようした上で SSL を利用しましょう。
しかし、簡単なパスワードを利用していない限りは URI を知られてもパスワード自体が知られることはないでしょう。
おわりに
簡易的ではありますが、静的ホスティングサービスでパスワード認証を利用する方法の紹介でした。
ちょっとした認証に利用できそうなので、使う機会があれば使っていきたいですね。