1

我正在管理一个使用 Rackspace 云托管来存储用户图像和文件的 Web 应用程序。目前,在为用户页面提供服务时,会使用到云中文件的真实链接。潜在的用户可以通过猜测文件名来查看其他用户的文件。文件名被混淆了,包含大约 30 个字母数字,但感觉还是不太好。

我的担忧是否有效,如果是,我怎样才能最好地解决这个问题?

4

1 回答 1

4

我认为这取决于文件中信息的敏感性。

要强制使用 30 个字符的字母数字文件名,假设每个字符有 36 个值(仅小写字母加 0-9),可能的组合为 36 ** 30:

48,873,677,980,689,257,489,322,752,273,774,603,865,660,850,176

4.887368e+46 科学计数法

假设有人真的很想窃取您的文件,并且他们有一个包含 200 台计算机的僵尸网络,只需检查每个文件的 http 响应代码,例如每个 bot 每秒 1,000 个文件名.. 说十分之一的文件名需要:

(((36**30) / 10) / (1000*200) / 60 / 60 / 24 / 365) = 774,887,081,124,576,000,274,650,435,593,838 年

(大致)

除非你的攻击者是一个非常坚定且装备精良的政府或其他东西,或者真的真的真的......幸运。我会说不用担心。


科学计数法中可能的组合数:

  • 仅小写字母数字:(26+10)**30 = 4.887368e+46
  • 添加区分大小写,给出 26+26+10 个不同的字符:5.912221e+53
  • 256 位加密(也是您的云文件 API 密钥的长度):1.157921e+77
  • 128位加密:3.402824e+38
  • 56 位 (DES) 加密:7.205759e+16

我知道在您的情况下,您可能会说 100,000 个您不希望人们猜测的文件名,而使用加密只有一个答案,.. 所以即使您从指数中减去 5,您仍然在那里128位以上的加密。


如果您仍然担心:

  • 也许将文件放在非公共云文件容器中,并从云服务器提供它们并强制人们拥有> 30个字符的密码:)
  • 添加更多可能的字符类型(可能是大写+小写)..并增加文件名的长度

您可以在文件名中使用“/”,以便在下载它们时仍然有一个好听的名称。例如。/whgwg/4y345yh3hy/543hgwhb/nice_name.jpg

所以如果你下载它,它会被保存为 nice_name.jpg 而不是一些乱码可怕的东西。


还要注意 CDN 缓存。如果您使用公共云文件,它们将被推送到 CDN 节点并缓存在那里。因此,假设 Mary 不小心上传了一些国家机密,它们被推出 CDN 节点,她删除了她的上传,无论您为文件夹设置的缓存时间如何,它仍然可以在 CDN 上使用。您可以使用 CDN api 来擦除它,但我不会依赖它。

最后 .. 确保您的数字不可猜测,例如不递增 .. 应该是完全随机的。

于 2011-12-07T12:13:52.797 回答