允许上传用 MD5 散列定义的 V4Signature() 图像,即使散列不匹配

问题描述

我正在使用 Google Cloud Storage Java 库通过 withV4Signature() 方法创建签名 URL,它似乎运行良好。但是,我的印象是,如果您在创建签名 URL 时指定图像的 MD5 哈希值,则任何尝试使用与指定的 MD5 哈希值不匹配的 URL 上传图像的尝试都将被拒绝。

情况似乎并非如此...因为我可以在“setMD5()”方法中指定我想要的任何 MD5 哈希值,并且 Google 存储将接受我上传文件

    BlobInfo blobInfo = BlobInfo.newBuilder(
            BlobId.of("mybucket,"myobject.jpeg"))
            .setMd5("some-Random-Md5-Hash-Unrelated-To-The-Image")
            .setContentType("image/jpeg")
            .build();

    URL url = storage.signUrl(blobInfo,30,TimeUnit.SECONDS,Storage.SignUrlOption.withV4Signature(),Storage.SignUrlOption.signWith(myServiceAccountCredentials),Storage.SignUrlOption.withMd5(),Storage.SignUrlOption.httpMethod(com.google.cloud.storage.HttpMethod.PUT),Storage.SignUrlOption.withContentType());

然后,使用具有完全不同的 MD5 哈希值的图像:

curl -X PUT --upload-file myobject.jpeg "https://storage.googleapis.com/mybucket/myobject.jpeg?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=[My Service Account Credential]%2F20210501%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20210501T035401Z&X-Goog-Expires=30&X-Goog-SignedHeaders=host&X-Goog-Signature=[Google Api Provided Signature]"

Google Storage 无异议地接受此图片上传。我的问题是,有没有其他人有在 Google Storage API 的签名 URL 上明确设置 MD5 哈希的经验,并且可以看到我哪里出错了?也许我误解了这个功能的本质,将 MD5 限制编码到一个单独的 URL 中是不可能的?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)