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

所以,那些有更多网络应用经验的人大概会知道这个问题的答案,我怀疑它很好理解,但是是什么阻止我改变数字和看到其他人的照片,这可能是我不应该看到的?

[我知道这不起作用,我只是想了解他们如何维护安全并避免此问题]

提前谢谢了,

缺口

4

1 回答 1

9

有几种方法可以实现它。

  1. 第一个是链接到验证请求的脚本或操作,然后返回图像。您可以在此处找到使用 ASP.NET MVC 的示例。缺点是它的效率非常低,并且您冒着为每个请求增加两倍带宽的风险(一次是为了让您的服务器可以从存储的任何位置获取图像,一次是为了将其提供给您的用户)。

  2. 第二个选项,你可以像 Facebook 一样,只为每张照片生成晦涩的 url。正如托马斯在他的评论中所说,你不会猜到一个 27 位的数字。

  3. 我认为第三个选项是最好的,尤其是如果您使用的是 Microsoft Azure 或 Amazon S3 之类的东西。Azure Blob 存储支持共享访问签名,让您可以为私有文件生成临时 url。这些可以设置为在几分钟内过期,或者持续一生。这些文件直接提供给用户,如果 url 在到期后泄漏,则没有风险。

    Amazon S3 与Query String Authentication有相似之处。

最终,您需要弄清楚您的威胁模型,并权衡每种方法的利弊做出决定。在 Facebook 上,这些图片可能已与数百名朋友分享。对隐私的期望显着降低,因此对每个请求进行身份验证可能是多余的。一个随机的、难以猜测的 URL 可能就足够了,让他们通过他们的 CDN 提供数据,并最大限度地减少每个请求的处理量。使用选项 3,您仍然需要生成这些签名 URL 的开销。

于 2012-10-20T16:50:12.967 回答