多くのサイト (YouTube が良い例です) が、たとえば行 ID を使用する代わりに、乱数と文字の文字列を生成するのはなぜですか?
通常、このようなもの
bla?v=wli4l73Chc0
の代わりに
bla?id=83934
行が多い場合は短くするだけですか?それとも他にいいところある?想像できるから: bla?id=23934234234
感謝と乾杯
多くのサイト (YouTube が良い例です) が、たとえば行 ID を使用する代わりに、乱数と文字の文字列を生成するのはなぜですか?
通常、このようなもの
bla?v=wli4l73Chc0
の代わりに
bla?id=83934
行が多い場合は短くするだけですか?それとも他にいいところある?想像できるから: bla?id=23934234234
感謝と乾杯
それらは実際にはランダムな文字列ではありません。通常、これらは Base-36 エンコーディングでエンコードされた数値 (通常は行 ID) です (明らかに常にそうであるとは限りませんが、それを使用するものはたくさんあります)。
なぜ彼らはそれを使うのですか?Base-36 でエンコードされた数値文字列は元の文字列よりも短いためです。
例: Base-36 の1234567890はkf12oiで、ほぼ 50% 短くなっています。
このウィキペディアの記事を参照してください。「実際の使用」セクションをチェックして、誰がそれを使用しているかを確認してください。
分散環境では、連続番号よりも乱数を生成して識別子を生成する方が簡単です。
私はRobの答えに賛成しましたが、リスクの1つについても少し詳しく説明します.
次のようなリンクを公開すると、行 ID を使用する代わりに、ウェブサイトが URL に対してランダムな英数字の文字列を生成するのはなぜですか? ここで、 258510 はデータベース ID であり、サイトをハッキングしようとする誰かがhttps://stackoverflow.com/questions/2581511に接続しようとしています。
stackoverflow だとデータベースの id ではないかもしれませんし、stackoverflow での質問は非公開にしてはいけないので、あっても大したことはありません。
しかし、これが、データ アクセスをデータの所有者に制限することが重要なサイトである場合、これにより、本来見るべきではないデータが表示される危険性が生じる可能性があります。
もちろん、所有者がデータを所有していない場合にデータの表示を拒否するためにできることとすべきことがありますが、URL がデータベース ID を識別しないようにすることをお勧めします。ロブが指摘したように、はるかに大きなドメインへのハッシュ、またはユーザーを表示するのに適切であり、ログインしたセッション内でのみ利用可能であるとすでに識別されている一連のデータへのセッションベースのインデックスを作成することをお勧めします。
正直なところ、なぜ彼らが一意の ID (またはデータベースによっては ObjectID など) を使用しないのかわかりません。 64、または URL 内で可能なもの) を使用して、ID がクエリ文字列でよりコンパクトになるようにしますか? (読み取り:wli4l73Chc0
非基数 10 の数値です)
情報を難読化し、そのパラメーターを介して渡すことができる情報の量を追加/増加させるためだと思います。
URL に生の行 ID やその他の変更されていないデータベース パラメータを含めることは、セキュリティ対策として不適切です。いくつかの大きなドメインにハッシュを設定する方がはるかに優れています。
一部の環境では、これを使用してセッションの状態変数を確立することもあります。たとえば、Cookie を使用しないセッションを使用する ASP.Net アプリがある場合、URL に同様のコードが含まれています。