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应用程序经验的人大概会知道答案,我怀疑这是众所周知的,但是又是什么阻止我更改数字并看到别人本来不应该看到的照片呢?
[我知道这行不通,我只是想了解他们如何维护安全性并避免此问题]
提前谢谢了,
缺口
有两种方法可以实现它。
第一个是链接到对请求进行身份验证的脚本或操作,然后返回图像。您可以在此处找到有关ASP.NET MVC的示例。缺点是效率很低,而且每个请求的带宽要增加两倍的风险(一次,这样服务器就可以从存储位置抓取图像,一次将其提供给用户)。
第二种选择,您可以像Facebook一样,只为每张照片生成模糊的URL。正如托马斯(Thomas)在评论中所说,您不会猜测27位数字。
我认为第三个选项是最好的,特别是如果您使用的是Microsoft Azure或Amazon S3。Azure Blob存储支持共享访问签名,使您可以为私有文件生成临时URL。可以将它们设置为在几分钟内到期,或持续一生。这些文件将直接提供给用户,并且在到期后url不会泄漏。
Amazon S3与查询字符串身份验证类似。
最终,您需要确定威胁模型,并权衡每种方法的利弊。在Facebook上,这些图像大概已与数百个朋友共享。人们对隐私的期望大大降低,因此对每个请求进行身份验证可能是过分的。随机的,难以猜测的URL可能就足够了,让他们通过CDN提供数据,并最大程度地减少每个请求的处理量。使用选项3,您仍然需要产生那些签名URL的开销。
| 归档时间: |
|
| 查看次数: |
1499 次 |
| 最近记录: |