9

私はソーシャルネットワークに興味があり、興味をそそる何かに出くわしました。

Facebookは、人々がURLで遊んだり、すべきでない写真にアクセスしたりするのをどのように防いでいますか?

拡大させてください。これが私のフィードに表示されたFacebook画像のURLの変更された例です-

https://fbcdn-sphotos-ga.akamaihd.net/hphotos-ak-prn1/s480x480/ {five_digit_number} _ {twelve_digit_number} _ {ten_digit_number} _n.jpg

したがって、Webアプリケーションの経験が豊富な人は、おそらくこれに対する答えを知っているでしょう。それはよく理解されていると思いますが、数字を変更したり、他の人の写真を見たりするのを防ぐにはどうすればよいでしょうか。

[これが機能しないことを理解しています。セキュリティを維持し、この問題を回避する方法を理解しようとしています]

よろしくお願いします。

ニック

4

1 に答える 1

9

それを達成する方法はいくつかあります。

  1. 1つ目は、リクエストを認証してから画像を返すスクリプトまたはアクションへのリンクです。ASP.NETMVCの例はここにあります。欠点は、それがかなり非効率的であり、リクエストごとに2倍の帯域幅のリスクがあります(サーバーが保存されている場所から画像を取得できるように1回、ユーザーに提供するために1回)。

  2. 2番目のオプションは、Facebookのように実行して、写真ごとにあいまいなURLを生成することです。トーマスが彼のコメントで言ったように、あなたは27桁の数字を推測するつもりはありません。

  3. 特にMicrosoftAzureやAmazonS3のようなものを使用している場合は、3番目のオプションが最適だと思います。Azure Blob Storageは、共有アクセス署名をサポートしています。これにより、プライベートファイルの一時URLを生成できます。これらは、数分で期限切れになるように設定することも、生涯続くように設定することもできます。ファイルはユーザーに直接提供され、有効期限後にURLがリークしてもリスクはありません。

    Amazon S3には、クエリ文字列認証に似たものがあります。

最終的には、脅威モデルを理解し、各アプローチの長所と短所を比較検討して決定を下す必要があります。Facebookでは、これらはおそらく何百人もの友人と共有されている画像です。プライバシーへの期待は大幅に低いため、すべてのリクエストを認証するのはやり過ぎかもしれません。ランダムで推測しにくいURLでおそらく十分です。そして、CDNを介してデータを提供し、リクエストごとの処理量を最小限に抑えましょう。オプション3を使用すると、これらの署名付きURLを生成するオーバーヘッドが発生します。

于 2012-10-20T16:50:12.967 に答える