0

私は、ユーザーが通常のハッシュパラメータを含む各ユーザーの特定の(しかし長い)確認リンクを備えた一般的な電子メール確認スクリプトを使用して電子メールを確認する必要があるサイトを持っています。

私が抱えている問題は、使用しているデバイスが原因で、長くて複雑な確認リンクに問題があるユーザーがいることです。

そのため、ユーザーごとに一意の確認リンクを生成する別の方法を作成する必要があります。これにより、パターンが明確にならず、理解されたり悪用されたりすることがなくなります。

私はBase62のエンコードとデコードを見てきましたが、私が見つけたものは数字のみに基づいているため、シーケンシャルな一意のユーザーIDを使用することに制限され、エンコードされた結果に明らかなシーケンシャルパターンが作成され、簡単に悪用される可能性があります。

できれば、DBを変更する必要のないソリューションが必要です。

理想的には、基本的にBit.lyや他のURL短縮サービスが独自のURLを作成するのと同じように短縮URLを作成したいのですが、それはユーザーID、ユーザー名、または電子メールのいずれかからエンコードおよびデコードでき、できればエンコード/デコードは、エンコードされた結果にパターンが現れないように、一意のキーで「ソルト」されます。

例:

したがって、確認リンクの代わりに次のようになります。

http://domain.com/confirm?email=blah@blah.com&hash=1f3870be274f6c49b3e31a0c6728957f

私はそれを次のように見せたいです:

http://domain.com/confirm/Sg5rdn

次に、Sg5rdnをデコードして、ユーザーのユーザー名、ユーザーID、または電子メールを取得し、それらを確認します。

これも可能ですか?

4

3 に答える 3

1

代わりに、確認コードを含むテーブルを作成するだけです。ユーザーが確認を行う必要がある場合は、(base62などを使用して)一意のコードを作成し、それをそのテーブルに挿入して、ユーザーIDに割り当てます。

次に、ユーザーが確認リンクをクリックしたら、確認コードテーブルからユーザーIDなどを取得します(コードが存在し、まだ確認されていないことなどを確認します)。

于 2011-09-05T15:20:42.290 に答える
1

ユーザーテーブルの列にコードを格納することをお勧めします。テーブルの例は非常に短くなっています。

id--user---email--------------key-----confirmed----other stuff
1   bob    bob@example.com    1h323f   1            ...
2   rob    rob@example.com    18gg3f   0            ...
3   steve  steve@example.com  a862gf   1            ...
4   tom    tom@example.com    17g23f   0            ...

ユーザーがアカウントにサインアップしたら、事前にキーを作成し、ユーザー名ectと一緒に保存します

次に、リンクをクリックしたら、電子メールに対するキーを確認し、確認済みを1に更新します。リンクで.htaccessを使用して、さらに短くすることができます。

RewriteRule ^confirm/(.*)/([a-zA-Z0-9]+)$ confirm.php?email=$1&hash=$2 [L]

例:http://domain.com/confirm/tom@example.com/17g23f

お役に立てれば

于 2011-09-05T15:31:26.050 に答える
0

私はあなたの期待が少し誇張されているのではないかと思います。
あなたが本当にできる唯一のことは、ハッシュを少し短くすることです。

Sg5rdnからユーザー名、ユーザーID、および電子メールを「デコード」する唯一の方法は、それらすべてをデータベースからフェッチすることです。

于 2011-09-05T15:18:54.203 に答える