Facebook图片网址 - 他们如何与未经授权的用户保持联系?

时间:2012-10-20 16:30:31

标签: facebook security web-applications secure-coding

我对社交网络很感兴趣,偶然发现一些令我好奇的事情。

Facebook如何阻止人们使用网址并获取他们不应该访问的照片?

让我展开,这是我的Feed上出现的Facebook图片网址的更改示例 -

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

所以,那些具有更多网络应用程序经验的人可能会知道这个问题的答案,我怀疑它已被很好地理解,但是什么阻止我改变数字并看到其他人可能不应该的照片呢? / p>

[我明白这不起作用,我只是想了解他们如何保持安全并避免这个问题]

非常感谢,

尼克

1 个答案:

答案 0 :(得分:3)

有几种方法可以实现它。

  1. 第一个是指向验证请求的脚本或操作的链接,然后返回一个图像。您可以在ASP.NET MVC here中找到一个示例。缺点是效率非常低,并且每次请求都会带来两倍的带宽风险(一次这样,您的服务器就可以从存储的任何地方获取图像,并且一次将图像提供给您的用户)。

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

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

    Amazon S3与Query String Authentication类似。

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