当您查看Twitter等社交网站上的个人资料图片时,他们会存储以下图像文件:
http://a1.twimg.com/profile_images/1082228637/a-smile_twitter_100.jpg
甚至在20110912这样的路径中都有一个日期。我能想到的唯一直接好处是阻止机器人以线性方式通过并下载存储中的所有文件。我错过了其他任何好处吗?随机化它的最佳方法是什么?
我正在使用Amazon S3,所以我将有一个子域服务我的所有静态内容。我的计划是在我的数据库中存储一个整数ID,然后只使用id连接URL以形成位置。
答案 0 :(得分:11)
我在公共网址中加密加密标识符的一个原因是,企业的增长率并不总是公开的。
如果仅通过创建新用户帐户或上传图像可以推断出当前ID,那么外部人员可以通过定期执行此操作并查看有多少ID来计算增长率(或上限)在经过的时间里使用。
无论是停滞不前还是它呈指数级爆炸,我希望能够控制这些信息的发布,而不是让竞争对手或业务分析师能够为自己推断出它。
离线示例是发票和支票号码。如果您定期向公司收取费用或由公司支付,那么您可以查看他们在该时间段内编写的发票或支票数量。
这是我维护的CPAN(Perl)模块,它使用基于SkipJack的双向加密来加扰32位ID:
它是Greg Rose用C语言编写的Skip32算法的直接翻译:
使用这种方法将每个32位id映射到(有效随机)对应的32位数字,该数字可以反转回原始id。您无需在数据库中保存任何额外内容。
我将加扰的id转换为8个十六进制数字,以便在URL中显示。
一旦您的ID接近429亿(32位),您将需要计划扩展URL结构以支持更多,但我希望尽可能长的缩短网址。
答案 1 :(得分:4)
更改网址是使过期资产无效的安全方式。
如果您想允许用户存储私有图像,这也是必需的。使用从用户帐户名称/ ID /路径中扣除的路径,只要您将资产存储在CDN上,就会使隐私设置无效。
答案 2 :(得分:2)
主要是防止名称冲突。例如,不止一个人可能会上传“IMG_0001.JPG”。您还可以避免限制一个目录中的文件数量,并且可以在多个服务器上对图像进行分片 - 像Twitter或Facebook这样的大型网站无法将所有照片存储在一台服务器上,无论多大。