web-dev-qa-db-ja.com

タイムスタンプを組み込んだハッシュの生成を生成して、ハッシュ化を解除して、生成時のタイムスタンプを取得する方法は?

ランダムIDに基づいてハッシュを作成したいのですが、そのハッシュは15分間だけ有効でなければなりません。それを行う方法はありますか?

これをフォームの送信に使用しています。不明な送信フォームまたは15分後に送信されたフォームがある場合、作成された時期を把握できますか?

セッションにランダムIDを保存しています。ユーザーがフォームを送信するときに、値を復号化して元のIDと照合します。それが一致し、15分以内または作成時間内にある場合、いくつかの検証を行った後、その値をデータベースに追加します。

1
nikunjM

あなたが通信する必要があるそのマルチパート情報。

まず、タイムスタンプを提供します。これは、「15分以内に送信された」ことに対して検証するものです。次に、タイムスタンプのハッシュに salt を追加します。ソルトは(サーバー上で)あなただけが知っています。

タイムスタンプが変更された場合、変更されたタイムスタンプ+ saltのハッシュは、ハッシュされた変更されていないタイムスタンプ+ saltと一致せず、フォームの送信を拒否します。

これは次のようになります。

<form ...>
<input type="hidden" name="timestamp" value="2015.07.15.22:17" />
<input type="hidden" name="timehash" value="9BC54D13B43D456D9167DA13F2E8351B" />
...
</form>

次に、タイムスタンプに対して検証します。文字列2015.07.15.22:17somesaltのmd5ハッシュを確認すると、md5合計9BC5...と一致することがわかります。したがって、タイムスタンプが有効であることがわかります。タイムスタンプがハッシュと一致しない(既知のソルトを使用)場合は、改ざんされています。

生成されたすべてのページでsomesaltが定数である必要はないことを指摘しなければなりません。これは、ユーザーセッションごとに生成された乱数である可能性があります(したがって、持続します)。あなたが保持し、このユーザーセッションで一貫しているのは秘密の情報です。

3
user40980

これを行う標準的な方法は [〜#〜] totp [〜#〜] と呼ばれます。基本的に、有効期限(現在+ t)だけでなく、時間間隔(通常は現在->現在+ t)をハッシュする方法。

Google、Facebook、Microsoft、GitHubなどで2要素認証に使用されます。通常、30秒程度有効な短い数字のセットですが、同じ原則を任意の期間に使用できます。

多くの言語で利用可能な実装があります。または、ウィキペディアの説明で、必要に応じて自分で実装することもできます。

0
Stoffe