Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Google Cloud Storage list objects with name containing "%" return 403 error

I am getting my objects by calling

https://<bucket>.storage.googleapis.com/?prefix=folder%2F<object name>%2F&delimiter=/&max-keys=1000

I have tried with other special characters like !, @, #, $, ^, &, *, (, ), etc. For the other special characters I just encode them in the , and I get the response just fine.

For example, with object "!@" under folder, the url is:

https://<bucket>.storage.googleapis.com/?prefix=folder%2F%21%22%2F&delimiter=/&max-keys=1000

However, when I try with object names with "%" and encode the percent sign to "%25", I get the following error:

<?xml version='1.0' encoding='UTF-8'?><Error><Code>InvalidSecurity</Code> <Message>The provided security credentials are not valid.</Message><Details>Request was not signed or contained a malformed signature</Details></Error>

What could be causing this issue ?

Edit

So I have tried double encoding the percent sign such that '%' character becomes "%2525" in the request. However, in the response, the prefix is strangely "%25". After testing with more cases, it turns out a request is successful only when "%25" is followed by 2 characters both within the range of '0' and 'f', however, the response prefix would be wrong. For example, "%25ab" in the request would result in "%ab" in the response prefix.

like image 439
BonBon Avatar asked Jul 31 '26 18:07

BonBon


1 Answers

I believe this is a service side bug: see https://issuetracker.google.com/issues/117932947

I think a workaround is to encode the percent twice. But this may start failing in the future when the bug is fixed.

like image 189
jterrace Avatar answered Aug 07 '26 14:08

jterrace



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!