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

标签 php file file-upload amazon-s3 amazon-web-services

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

目前我在将文件发送到 S3 之前在我的 php 脚本中使用随机字符串加密文件名。

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

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

最佳答案

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

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

关于php - Amazon S3 为每个对象创建唯一键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12657954/

相关文章:

php - 如何在 Wordpress 中使用 Bootstrap 为页脚指定高度?

file-upload - 如何解决 postman 中的文件上传错误?

android - 在android中上传文件到Dropbox,putFile方法抛出异常

php - 将星级和平均值添加到 Woocommerce 中的产品 "Review"项目菜单中

php - Web 应用程序开发的优化策略

java - Spark - 如何使用给定权限写入文件

python - 为什么 Python 和 wc 在字节数上不一致?

python - 使用 Flask 处理大文件上传

php - 如果状态成功,如何仅将 Json 插入/更新到 mysql

javascript - 发布文件是否需要 <form> 标签和按钮?