【发布时间】:2011-09-04 00:58:11
【问题描述】:
我知道它是安全令牌 URL,可能还有另一个名字。但我想你们都知道。
如果您想将内容交付限制到某个客户端,则它主要适用于您已经提前提交了特定网址。
您获取一个秘密令牌,将其与您要保护的资源连接起来,拥有它,当客户端在您的一台服务器上请求此 URL 时,哈希值会根据从请求中收集的信息和比较哈希。如果相同,则传递内容,否则用户将被重定向到您的网站或其他内容。
您还可以在必须在 URL 上放置时间的时间戳,或包含用户 ip 地址以限制投递到他的连接。
Amazon(S3 和 Cloudfront)、Level 3 CDN、Rapidshare 和许多其他公司都使用此技术。它也是 http 摘要身份验证的基本部分,尽管它在链接失效和其他方面更进了一步。
如果您想了解更多信息,这里是Amazon docs 的链接。
现在我对这种方法的担忧是,如果有人破解了你的链接的一个令牌,攻击者会得到你的令牌纯文本,并可以自己签署任何以你的名义的 URL。
或者更糟糕的是,就亚马逊而言,在管理范围内访问您的服务。
当然,这里散列的字符串通常很长。你可以包含很多东西,甚至可以通过在请求中添加一些不必要的数据来强制数据具有最小长度。可能在 URL 中添加一些未使用的伪变量,并用随机数据填充它。
因此,蛮力攻击来破解 sha1/md5 或任何你使用的哈希是相当困难的。但是协议是开放的,所以你只需要填补秘密令牌所在的空白,然后用请求中已知的数据填充其余部分。而且今天的硬件很棒,可以以每秒数十兆字节的速度计算 md5。这种攻击可以分布到计算云上,并且您不限于“登录服务器每分钟尝试 10 次左右”之类的东西,这使得散列方法通常非常安全。现在有了亚马逊 EC2,你甚至可以短时间租用硬件(用他们自己的武器打败他们哈哈!)
那你怎么看?我的担忧有根据还是我偏执?
然而,
我目前正在为特殊需求(集成媒体转码和流媒体等特殊交付方法)设计对象存储云。
现在 level3 引入了一种替代方法来保护令牌 URL。它目前是测试版,只对特别要求它的客户开放。他们称之为“代理身份验证”。
发生的情况是内容交付服务器向您(客户端)设置中指定的服务器发出 HEAD 请求并模仿用户请求。因此传递了相同的 GET 路径和 IP 地址(作为 x_forwarder)。您使用 HTTP 状态代码进行响应,告诉服务器是否先进行内容交付。
您也可以在其中引入一些安全令牌过程,您还可以对其施加更多限制。比如让一个 URL 只被请求 10 次左右。
它显然会带来很多开销,因为会发生额外的请求和计算,但我认为它是合理的,我没有看到任何警告。你呢?
【问题讨论】: