6

Twitterなどのソーシャルネットワーキングサイトでプロフィール写真を見ると、次のような画像ファイルが保存されています。

http://a1.twimg.com/profile_images/1082228637/a-smile_twitter_100.jpg

または、20110912のようなパスのどこかに日付があります。私が考えることができる唯一の直接的な利点は、ボットがストレージ内のすべてのファイルを直線的に通過してダウンロードするのを防ぐことです。他のメリットがありませんか?それをランダム化するための最良の方法は何ですか?

私はAmazonS3を使用しているので、すべての静的コンテンツを提供する1つのサブドメインがあります。私の計画は、データベースに整数IDを格納し、URLとIDを連結して場所を形成することでした。

4

3 に答える 3

10

パブリックURLで識別子を暗号的にスクランブルする理由の1つは、ビジネスの成長率が常にパブリックであるとは限らないためです。

新しいユーザーアカウントを作成するか画像をアップロードするだけで現在のIDを推測できる場合、外部の人はこれを定期的に実行し、その間に使用されたIDの数を確認することで、成長率(または上限)を計算できます。経過時間。

停滞している場合でも、指数関数的に爆発している場合でも、競合他社やビジネスアナリストが自分で推測できるようにするのではなく、この情報の公開を管理できるようにしたいと思います。

このオフラインの例は、請求書と小切手番号です。会社から定期的に請求または支払いを受ける場合は、その期間に会社が書いた請求書または小切手の数を確認できます。

これが私が維持しているCPAN(Perl)モジュールで、SkipJackに基づく双方向暗号化を使用して32ビットIDをスクランブルします。

http://metacpan.org/pod/Crypt::Skip32

これは、GregRoseによってCで記述されたSkip32アルゴリズムの直接翻訳です。

http://www.qualcomm.com.au/PublicationsDocs/skip32.c

このアプローチを使用すると、各32ビットIDが(事実上ランダムな)対応する32ビット番号にマップされ、元のIDに戻すことができます。データベースに余分なものを保存する必要はありません。

スクランブルされたIDをURLに表示するために8桁の16進数に変換します。

IDが42.9億(32ビット)に近づいたら、より多くをサポートするようにURL構造を拡張することを計画する必要がありますが、私はできるだけ長いURLを短くするのが好きです。

于 2011-10-09T17:36:31.390 に答える
4

URLを変更することは、古いアセットを無効にする安全な方法です。

ユーザーがプライベート画像を保存できるようにする場合にも必要です。ユーザーのアカウント名/ID/パスから控除可能なパスを使用すると、アセットをCDNに保存するとすぐにプライバシー設定が使用できなくなります。

于 2011-10-10T21:19:34.097 に答える
2

主に、名前の衝突を防ぎます。たとえば、複数の人が「IMG_0001.JPG」をアップロードする場合があります。また、1つのディレクトリ内のファイル数の制限を回避し、複数のサーバー間で画像をシャーディングできます。TwitterやFacebookのような巨大なサイトが、どんなに大きくても、すべての写真を1つのサーバーに保存できる方法はありません。

于 2011-10-09T16:50:00.190 に答える