2010-12-30 14 views
4

私たちのdbの主キーにはUUIDを使用します(phpによって生成され、mysqlに格納されます)。問題は、誰かが何かを編集したり自分のプロフィールを見たりしたいときに、URLの最後にこの巨大で恐ろしい、醜いuuid文字列があることです。UUIDをショートコードにすることは安全ですか? (最初の8文字のみを使用します)

最初の8文字だけを使用した場合、最初のハイフンの前にあるすべての文字は安全(読み込み:まだ一意)ですか?

安全でない場合は、URLに使用するために他のものに変換する方法がありますか?これは、参照として使用するためにヘックスに戻すことができますか?私はbase64で22文字にエンコードすることができますが、さらに短くなっていることは知っていますか?

EDIT 私はthis questionを読んでおり、base64を使用しています。もう一度、何か短い?

+0

UUIDの最初の8文字を除くすべてが余計であることを期待していますか?彼らはそれをユニークにするためにそこにいる。いずれにしても、22文字ではなく8文字であれば、それで友好的なユーザーエクスペリエンスが実現すると思いますか?私はそれについて心配する時間を費やすことはありません。私は場所のバーに狂ったURIを見てきましたが、サイトのユーザビリティにはまったく影響しません。 – webbiedave

+0

文字が特定の部分文字列に対して一様な分布を持っているため、md5ハッシュをどのように短縮できるか(どこかを読んでいますが、どこを覚えていないか)に似た考えをしていました。私は見る。 – helloandre

+0

暗号化ハッシュ関数は、許容されるレベルの衝突発生を期待され、出力文字列を切り捨てることは、その可能性を高めるだけである。あなたの状況では、「衝突」(1つのIDが多数のレコードを指している)の可能性はありません。 – webbiedave

答えて

4

UUIDを短縮すると、衝突の可能性が高くなります。あなたはそれをすることができますが、それは悪い考えです。 8文字のみを使用すると4バイトのデータしかないので、2^16のIDを持つと衝突が予想されます。

あなたの最善の選択肢は、(16進表現ではなく)UUIDの生のバイトを取り、それをbase64でエンコードすることです。 URLに何が含まれているかをユーザーが気にすることを真剣に考えているので、心配する必要はありません。

1

uuidを切り詰めるのは安全ではありません。また、それらは世界的にユニークなものになるように設計されているため、運行を短縮することはありません。あなたの最善の策は、各ユーザーに一意の番号を割り当てるか、ユーザーがデコードできるカスタム(一意の)文字列(ユーザー名やニックネーム名など)を選択させることです。ですから、あなたは?id = ....またはedit?name = blahを編集して、あなたのスクリプトの中のUUIDに名前をデコードすることができます。

+0

を選択するとカスタム名を選択できますが、必ずしもユーザープロファイルを編集しているわけではありません。ユーザーがuuid以外の独特のもの(写真アルバムと思われるもの)で作成するものである可能性があります。 – helloandre

0

これはUUIDをどのように生成しているかによって異なります。PHPのuniqidを使用している場合は、最もユニークな数字です。ただし、データを切り捨てる場合は、とにかくユニークになるという保証はありません。

これはやや劣ったアプローチですが、クエリ文字列にIDの代わりにユニークな(そして理想的に意味のある)テキスト参照文字列を使用する方法はありませんか? (問題のドメインの知識がなくても知りませんが、SEOなどが要因ではないとしても、常に私の意見ではより良いアプローチです)。

このアプローチを使用している場合は、 MySQLは一意のIDを生成します。これはおそらくPHPでこれを処理しようとするよりもはるかに純粋なアプローチです。

1

URLのUUIDでユーザーを怖がらせることを心配している場合は、代わりに非表示のフォームフィールドに書き出すことをおすすめします。

+0

私はこの(裸のURL)とあなたが編集していたURLのいくつかの視覚的な合図との間にいくつかの妥協点を見つけたいと思っていました。このアプローチで終わるかもしれない。 – helloandre

3

そのUUIDから1つのビットをカットしないでください:それを生成したアルゴリズムを制御できません。複数の実装が可能です。アルゴリズムの実装は変更される可能性があります(例:あなたがアドレスバーのUUIDが恐ろしくない、または難しいとは思わない場合は、「UUID」の単純なGoogle検索でも最悪のURLが生成され、誰もがGoogle URLを調べることに慣れています。

もっと見栄えの良いURLが必要な場合は、このstackoverflow.comのアドレスバーをご覧ください。彼らは記事IDの後に質問のタイトルを使用しています。IDの部分だけが関連しています。読者の目にはそれを簡単にするためのすべてがあります(IDの後に何かを削除してください、それをジャンクに置き換えることができます)。

関連する問題