【问题标题】:Why randomize your file names for cloud storage/CDN?为什么要为云存储/CDN 随机化文件名?
【发布时间】:2014-04-08 19:20:56
【问题描述】:

当您在 Twitter 等社交网站上查看个人资料图片时,它们会存储以下图像文件:

http://a1.twimg.com/profile_images/1082228637/a-smile_twitter_100.jpg

甚至在路径中的某处有一个日期,例如 20110912。我能想到的唯一直接好处是防止机器人通过并以线性方式下载存储中的所有文件。我错过了任何其他好处吗?随机化它的最佳方法是什么?

我正在使用 Amazon S3,因此我将有一个子域来服务我的所有静态内容。我的计划是在我的数据库中存储一个整数 ID,然后将 URL 与 id 连接起来形成位置。

【问题讨论】:

    标签: amazon-s3 cloud cdn content-delivery-network cloud-storage


    【解决方案1】:

    我对公共 URL 中的标识符进行加密加扰的一个原因是,业务的增长率并不总是公开的。

    如果当前 id 可以简单地通过创建新用户帐户或上传图片来推断,那么外部人员可以通过定期执行此操作并查看有多少 id 来计算增长率(或上限)在过去的时间内使用。

    无论是停滞不前还是呈指数级爆炸式增长,我都希望能够控制这些信息的发布,而不是让竞争对手或业务分析师自行推断。

    这方面的离线示例是发票和支票号码。如果您定期收到公司的账单或付款,那么您可以查看他们在该时间段内开出的发票或支票数量。

    这是我维护的一个 CPAN (Perl) 模块,它使用基于 SkipJack 的两种方式加密来加扰 32 位 ID:

    http://metacpan.org/pod/Crypt::Skip32

    它是 Greg Rose 用 C 语言编写的 Skip32 算法的直接翻译:

    http://www.qualcomm.com.au/PublicationsDocs/skip32.c

    使用这种方法将每个 32 位 id 映射为(有效随机)对应的 32 位数字,该数字可以反转回原始 id。您不必在数据库中保存任何额外内容。

    我将打乱的 id 转换为 8 个十六进制数字,以便在 URL 中显示。

    一旦您的 id 接近 42.9 亿(32 位),您就需要计划扩展 URL 结构以支持更多,但我希望 URL 越短越好。

    【讨论】:

    • 我喜欢这种思路。我将不得不重新考虑我的身份生成策略。
    【解决方案2】:

    更改 URL 是一种使过时资产失效的安全方法。

    如果您想允许用户存储私有图像,这也是必要的。一旦您将资产存储在 CDN 上,使用可从用户帐户名称/ID/路径中扣除的路径会使隐私设置失效。

    【讨论】:

      【解决方案3】:

      主要是防止名称冲突。例如,多人可能会上传“IMG_0001.JPG”。您还可以避免对一个目录中文件数量的限制,并且可以在多台服务器上分割图像 - 像 Twitter 或 Facebook 这样的大型网站无法将所有照片存储在一台服务器上,无论多大。

      【讨论】:

      • 我理解您的意思,但 Twitter 使用 Amazon S3,因此他们不必担心服务器或目录的概念。他们可以在一个目录中存储一万亿个对象(或尽可能多的对象),而不必担心它。在我的例子中,我使用 MySQL 中的自动增量整数列作为 S3 上的相应文件名,因此命名冲突不应该成为问题。那么您认为有什么好的方法可以防止机器人系统地下载您的所有文件吗?
      • 他们肯定要担心是否要列出目录中的文件以查找特定文件。
      • 他们必须将有关文件位置的元数据存储在其他地方(数据库、JSON 文档等)。我知道 Twitter 使用 Amazon S3 的事实,如果他们真的想要,他们可以将所有图像存储在 a1.twimg.com/* 下。亚马逊的云处理硬件,因此您不必考虑目录。由于我专门询问 S3,因此在这种情况下,分片和集群不是问题。
      • 正如 ceejayoz 提到的,当您将对象全部放在一个“文件夹”中时,列出特定路径中的对象是有问题的。
      猜你喜欢
      • 1970-01-01
      • 2022-01-14
      • 2018-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 2020-09-10
      相关资源
      最近更新 更多