リセットパスワードトークンを生成するためのベストプラクティス
-
21-12-2019 - |
質問
リセットパスワードトークンをどのように構築するかについてのベストプラクティスはいかなるか?私は考えています:
ランダム17文字[A-ZA-Z0-9] +グローバルに固有のID +ランダム17文字[A-ZA-Z0-9]。
リセットパスワードトークンのリセット時の優れたソリューション、または業界標準はありますか?
解決
考慮すべき重要な点がいくつかあります。
- コードは実際にはランダム(mcrypt_dev_urandomから読み取る)であり、他のユーザー関連情報から頼まないでください。
- 理想的には、コードはURLに関する問題を回避するための基本62符号化(A - Z A - Z 0-9)である。
- storeのみデータベースのトークンのハッシュ、それ以外の場合、データベースへの読み取りアクセス権を持つ攻撃者は任意のアカウントをリセットできます。
- SHA512のようなハッシュアルゴリズムを塩なしで塩を持っていた。トークンが非常に強い(0~9 z z z zの最小長さ20)の場合、これは安全です。理論的には、データベースに入力する前にそのようなハッシュがすでに存在するかどうかを確認する必要があります。実際にはこれはごくわずかです。 パスワードリセットクラスを実装しました。
- あなたはbcryptとsaltでトークンをハッシュしました。これにより、短いトークンが可能になりますが、データベース内のハッシュされたトークンを検索することはできません。代わりに、トークンを見つけるためのリンクに行IDを含める必要があります。
これにより、ユーザーがリンクをクリックした後にデータベース内のトークンのハッシュを見つける必要があるという問題があります。トークンを保存する方法は2つあります。
所属していません StackOverflow