13

多くのサイト (YouTube が良い例です) が、たとえば行 ID を使用する代わりに、乱数と文字の文字列を生成するのはなぜですか?

通常、このようなもの

bla?v=wli4l73Chc0

の代わりに

bla?id=83934

行が多い場合は短くするだけですか?それとも他にいいところある?想像できるから: bla?id=23934234234

感謝と乾杯

4

7 に答える 7

9

それらは実際にはランダムな文字列ではありません。通常、これらは Base-36 エンコーディングでエンコードされた数値 (通常は行 ID) です (明らかに常にそうであるとは限りませんが、それを使用するものはたくさんあります)。

なぜ彼らはそれを使うのですか?Base-36 でエンコードされた数値文字列は元の文字列よりも短いためです。

例: Base-36 の1234567890kf12oiで、ほぼ 50% 短くなっています。

このウィキペディアの記事を参照してください。「実際の使用」セクションをチェックして、誰がそれを使用しているかを確認してください。

于 2010-04-05T23:21:54.820 に答える
6

分散環境では、連続番号よりも乱数を生成して識別子を生成する方が簡単です。

于 2010-04-05T22:19:17.590 に答える
4

私はRobの答えに賛成しましたが、リスクの1つについても少し詳しく説明します.

次のようなリンクを公開すると、行 ID を使用する代わりに、ウェブサイトが URL に対してランダムな英数字の文字列を生成するのはなぜですか? ここで、 258510 はデータベース ID であり、サイトをハッキングしようとする誰かがhttps://stackoverflow.com/questions/2581511に接続しようとしています。

stackoverflow だとデータベースの id ではないかもしれませんし、stackoverflow での質問は非公開にしてはいけないので、あっても大したことはありません。

しかし、これが、データ アクセスをデータの所有者に制限することが重要なサイトである場合、これにより、本来見るべきではないデータが表示される危険性が生じる可能性があります。

もちろん、所有者がデータを所有していない場合にデータの表示を拒否するためにできることとすべきことがありますが、URL がデータベース ID を識別しないようにすることをお勧めします。ロブが指摘したように、はるかに大きなドメインへのハッシュ、またはユーザーを表示するのに適切であり、ログインしたセッション内でのみ利用可能であるとすでに識別されている一連のデータへのセッションベースのインデックスを作成することをお勧めします。

于 2010-04-05T23:12:07.837 に答える
4

正直なところ、なぜ彼らが一意の ID (またはデータベースによっては ObjectID など) を使用しないのかわかりません。 64、または URL 内で可能なもの) を使用して、ID がクエリ文字列でよりコンパクトになるようにしますか? (読み取り:wli4l73Chc0非基数 10 の数値です)

于 2010-04-05T22:23:31.777 に答える
3

情報を難読化し、そのパラメーターを介して渡すことができる情報の量を追加/増加させるためだと思います。

于 2010-04-05T22:18:33.513 に答える
1

URL に生の行 ID やその他の変更されていないデータベース パラメータを含めることは、セキュリティ対策として不適切です。いくつかの大きなドメインにハッシュを設定する方がはるかに優れています。

于 2010-04-05T22:22:55.193 に答える
0

一部の環境では、これを使用してセッションの状態変数を確立することもあります。たとえば、Cookie を使用しないセッションを使用する ASP.Net アプリがある場合、URL に同様のコードが含まれています。

于 2010-04-05T22:33:28.743 に答える