ハッシュ(HMAC)を使ってパスワード付きURLを作る方法

(更新日: 2017/02/28)

より高度なCSRF対策 – URI個別にバリデーションする方法でハッシュ(HMAC)を使えばデータベースを使わずに有効期限付きのURLを作れる、と紹介しました。今回はパスワード付きURL(URI)の作り方を紹介します。

まず、安全性についてはハッシュ(HMAC)を使って有効期限付きURLを作る方法を参照してください。

ハッシュ(HMAC)を使ってパスワード付きURIを作る方法

ハッシュ(HMAC)を使って有効期限付きURLを作る方法とほとんど同じです。以下の方法でデータベースを使わずにパスワード付き(この例の場合は有効期限付き)のURIを作れます。

 

まとめ

有効期限付きURIと異る部分は

  • HMACによって導出された鍵をURLに付けず、ユーザーに入力させる

だけです。

確実に正しい(到達可能な)メールアドレスを入力したユーザーにだけ参照/ダウンロードを許可する、といった場合に便利です。

  1. ページにアクセスした際に「このページの参照にはメールアドレスの確認が必要です。メールアドレスを入力してください」といったフォームを表示する。
  2. ユーザーがメールアドレスフォームを使ってパスワードをリクエストする。
  3. サーバーは生成した鍵をメールを使ってユーザーに通知すると同時に「メールで送信したパスワードを入力してください」といったフォームを表示する。
  4. ユーザーがパスワードを送信し、サーバーはパスワードが正しければアクセスを許可する。

例えばセッションと組み合わせて使えば1、そのセッションだけ参照/ダウンロード可能とすることも簡単です。ユーザーID/グループIDでも同様なことが可能です。

ユーザーに入力させるパスワード(導出鍵)は最初の10文字程度でも十分な場合が多いでしょう。この場合、HMACハッシュ値の必要文字数分だけ同じかチェックします。


  1. セッション限りとするにはsalt(事前共有鍵)を$_SESSIONに保存し、saltが一致しているか確認するだけです。 

Comments

comments