Facebook图片网址-如何防止未经授权的用户访问?

goo*_*ose 5 security facebook web-applications secure-coding

我对社交网络感兴趣,并且偶然发现了一些令我好奇的东西。

Facebook如何使人们避免使用URL并获得他们不应该使用的照片的访问权限?

让我扩展一下,这是我的供稿上显示的一个Facebook图片网址的变体示例,

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

所以,那些拥有更多Web应用程序经验的人大概会知道答案,我怀疑这是众所周知的,但是又是什么阻止我更改数字并看到别人本来不应该看到的照片呢?

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

提前谢谢了,

缺口

mfa*_*nto 5

有两种方法可以实现它。

  1. 第一个是链接到对请求进行身份验证的脚本或操作,然后返回图像。您可以在此处找到有关ASP.NET MVC的示例。缺点是效率很低,而且每个请求的带宽要增加两倍的风险(一次,这样服务器就可以从存储位置抓取图像,一次将其提供给用户)。

  2. 第二种选择,您可以像Facebook一样,只为每张照片生成模糊的URL。正如托马斯(Thomas)在评论中所说,您不会猜测27位数字。

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

    Amazon S3与查询字符串身份验证类似。

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

  • 另一方面,如果这是医学成像数据,那么您可能会试图阻止定向攻击,而泄露的后果将是严重的,损失高达数百万美元。如果你是敌对国家的持不同政见者,那么你的对手拥有近乎无限的资源,其后果就是生命,所以也许严重的不便是可以接受的。当您选择锁门并因此处理钥匙时,当您规划回家路线时等,您已经每天进行威胁模型。这只是将其应用到您的架构中。 (2认同)