Amazon S3为每个对象创建唯一键

Cyb*_*kie 8 php file-upload file amazon-s3 amazon-web-services

我的应用用户将他们的文件上传到一个存储桶 如何确保S3存储桶中的每个对象都有唯一的密钥以防止对象被覆盖?

目前我正在使用PHP脚本中的随机字符串加密文件名,然后将文件发送到S3.

为了便于讨论,我们假设上传者找到了一种在上传时操纵文件名的方法.他想用香蕉图片替换我网站上的所有图片.如果加密失败,防止在S3中覆盖文件的好方法是什么?

编辑:我认为版本控制不起作用,因为我在显示来自我的存储桶的图像时无法在图像URL中指定版本ID.

Ter*_*son 3

你是加密还是散列?如果您使用 md5 或 sha1 哈希值,攻击者可以轻松发现哈希冲突并让您踩到香蕉皮滑倒。如果您在没有随机初始化向量的情况下进行加密,则攻击者可能能够在上传数百个文件后推断出您的密钥,并且加密可能不是最好的方法。它的计算成本很高,难以实现,而且您可以用更少的努力获得更安全的机制来完成这项工作。

\n\n

如果您在每个文件名前面添加一个随机字符串,使用相当可靠的熵源,您\xe2\x80\x99不会有任何问题,但您应该检查该文件是否已经存在。尽管编写一个循环来检查、使用S3::GetObject并生成新的随机字符串对于几乎永远不需要运行的事情来说似乎需要付出很大的努力,但“几乎从不”意味着它最终发生的可能性很高。

\n

  • @TerenceJohnson,“几乎从不”可以通过添加更多随机位来“任意不可能”。额外前往 S3 会影响您的服务时间。 (3认同)