1

クリックを追跡する URL があり、ユーザーがその URL を共有できないようにしたいと考えています。

したがって、私が考えたのは、何らかの暗号化されたタイムスタンプ (ソルトを含む) である文字列を持つ一意の URL を作成し、その暗号化されたタイムスタンプから 5 分以内にリンクがクリックされた場合、それは有効になるというものでした。

これを行うより良い方法はありますか?そうでない場合、これが生成されたときとクリックされたときのタイムスタンプがほとんどの場合異なるため、どのように復号化しますか?

4

2 に答える 2

2

すでに与えられたコメントと回答は複雑すぎると思います。この問題は、パスワード リセット リンクに似ているようです。あなたはただできる:

  1. ランダムなトークンを生成し、そのソルト付きハッシュ (またはセキュリティを強化するためのPBKDF2(トークン、ソルト))を有効期限とともにデータベースに保存します。

  2. 誰かが URL を使用するたびに、それをハッシュし、保存されているコピーに対して検証し、期限が切れていないことを確認します。

「暗号化されたタイムスタンプ」スキームのいずれにも、その AES キーを安全に処理する方法の問題が依然としてあります。保存する必要があるランダムなキーがあるか、派生可能である場合、安全ではありません。

脅威モデルは、おそらく、アプリケーションまたはデータベースのいずれかが侵害されると、他方が侵害されると想定する必要があります。その場合、トークンを保存するだけで、複雑さは増しません。

それでも URL にタイムスタンプを埋め込む必要がある場合は、URL にSHA256-HMAC を含むAzure Shared Access Signaturesの仕組みを調べることができます。

于 2013-01-24T03:24:29.063 に答える
0

ページが提供されるときに、タイムゾーンUTCに変換されたタイムスタンプを生成します。対称的に暗号化し(たとえば、AES-256を使用)、URLに配置します。

ユーザーがそのような暗号化されたタイムスタンプを持つURLにアクセスするように要求した場合は、同じキーで復号化します(編集:キーを問題のコンテンツのソルトハッシュにして、異なるコンテンツごとに異なるが常に同じになるようにします。鍵)。タイムスタンプがタイムゾーンUTCに変換されたサーバーのタイムスタンプと比較して5分未満前の場合は、それを拒否します。それ以外の場合は受け入れます。

ユーザーは別の暗号化されたタイムスタンプを入力してあなたをだますことはできません。なぜなら、彼らはあなたのキーを知らず、見つけることができないからです(それがどんなタイムスタンプであったかを知っていても、暗号化アルゴリズムはあなたを見つけるのに十分な情報を与えませんキー)およびすべてのタイムスタンプの選択と比較はサーバー側で行われます。

編集:編集では、あるコンテンツに有効なタイムスタンプを取得して、別のコンテンツに有効なタイムスタンプに添付することもできません。

于 2013-01-24T03:04:47.100 に答える