为什么 CDN 不需要身份验证来访问静态文件?

信息安全 验证 Facebook
2021-09-09 01:53:25

为什么像 Facebook 这样的公司不需要经过身份验证的 HTTP/HTTPS 请求来访问使用 CDN 的内容(如图像)?

在某种程度上,一旦一个“朋友”可以访问图像 URL,他/她就可以有效地将该 URL 发布到世界,从而允许匿名访问。这实际上是“通过默默无闻的安全”,因为它只依赖于由(UUID-like)fbID 组成的 URL 是秘密的。我相信 Facebook 将其称为基于能力的安全模型,但将 URL 绑定到特定用户以进行归因以及采用某种形式的定期 URL/fbID 轮换是否有意义?

2个回答

其原因是大规模应用。当您有大型应用程序时,检查授权会占用不可接受的资源量。这就是为什么静态资源,如图片、视频和其他内容,使用随机令牌外部存储在静态 CDN 服务器上,然后授权响应可以包含此令牌。

这意味着他们只需要几个复制的数据库服务器,然后他们就可以拥有大量相互永久缓存的 CDN 服务器。

分布式服务器也使旋转变得困难,因为需要告诉静态 CDN 服务器旋转该值。这会导致不可接受的资源使用,因为这需要定期进行。与仅需要在上传时设置的随机值相反。

即使计算 md5 哈希值、生成随机值或看起来“简单”的东西,对于分布式 CDN 服务器来说也是一项繁重的工作。

所以服务器是一个简单的文件存储。基本上,所有身份验证和随机值的生成都发生在“活动服务器”(运行代码)上,而静态服务器仅根据文件名存储文件,并根据文件名提供文件。

今天的一些 CDN 确实提供了您所描述的某种形式的功能。例如,Azure 允许在其某些 CDN 上进行令牌身份验证

令牌身份验证是一种机制,可让您防止 Azure 内容交付网络 (CDN) 将资产提供给未经授权的客户端

与其他答案一样,这些机制可能会对可扩展性和延迟产生严重影响,因此它们受到很大限制。