我正在管理一个使用 Rackspace 云托管来存储用户图像和文件的 Web 应用程序。目前,在为用户页面提供服务时,会使用到云中文件的真实链接。潜在的用户可以通过猜测文件名来查看其他用户的文件。文件名被混淆了,包含大约 30 个字母数字,但感觉还是不太好。
我的担忧是否有效,如果是,我怎样才能最好地解决这个问题?
我正在管理一个使用 Rackspace 云托管来存储用户图像和文件的 Web 应用程序。目前,在为用户页面提供服务时,会使用到云中文件的真实链接。潜在的用户可以通过猜测文件名来查看其他用户的文件。文件名被混淆了,包含大约 30 个字母数字,但感觉还是不太好。
我的担忧是否有效,如果是,我怎样才能最好地解决这个问题?
我认为这取决于文件中信息的敏感性。
要强制使用 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 年
(大致)
除非你的攻击者是一个非常坚定且装备精良的政府或其他东西,或者真的真的真的......幸运。我会说不用担心。
科学计数法中可能的组合数:
我知道在您的情况下,您可能会说 100,000 个您不希望人们猜测的文件名,而使用加密只有一个答案,.. 所以即使您从指数中减去 5,您仍然在那里128位以上的加密。
如果您仍然担心:
您可以在文件名中使用“/”,以便在下载它们时仍然有一个好听的名称。例如。/whgwg/4y345yh3hy/543hgwhb/nice_name.jpg
所以如果你下载它,它会被保存为 nice_name.jpg 而不是一些乱码可怕的东西。
还要注意 CDN 缓存。如果您使用公共云文件,它们将被推送到 CDN 节点并缓存在那里。因此,假设 Mary 不小心上传了一些国家机密,它们被推出 CDN 节点,她删除了她的上传,无论您为文件夹设置的缓存时间如何,它仍然可以在 CDN 上使用。您可以使用 CDN api 来擦除它,但我不会依赖它。
最后 .. 确保您的数字不可猜测,例如不递增 .. 应该是完全随机的。