|
@@ -198,16 +198,34 @@ class MessageFileParser:
|
|
|
if "amazonaws.com" not in parsed_url.netloc:
|
|
|
return False
|
|
|
query_params = parse_qs(parsed_url.query)
|
|
|
- required_params = ["Signature", "Expires"]
|
|
|
- for param in required_params:
|
|
|
- if param not in query_params:
|
|
|
+
|
|
|
+ def check_presign_v2(query_params):
|
|
|
+ required_params = ["Signature", "Expires"]
|
|
|
+ for param in required_params:
|
|
|
+ if param not in query_params:
|
|
|
+ return False
|
|
|
+ if not query_params["Expires"][0].isdigit():
|
|
|
return False
|
|
|
- if not query_params["Expires"][0].isdigit():
|
|
|
- return False
|
|
|
- signature = query_params["Signature"][0]
|
|
|
- if not re.match(r"^[A-Za-z0-9+/]+={0,2}$", signature):
|
|
|
- return False
|
|
|
- return True
|
|
|
+ signature = query_params["Signature"][0]
|
|
|
+ if not re.match(r"^[A-Za-z0-9+/]+={0,2}$", signature):
|
|
|
+ return False
|
|
|
+
|
|
|
+ return True
|
|
|
+
|
|
|
+ def check_presign_v4(query_params):
|
|
|
+ required_params = ["X-Amz-Signature", "X-Amz-Expires"]
|
|
|
+ for param in required_params:
|
|
|
+ if param not in query_params:
|
|
|
+ return False
|
|
|
+ if not query_params["X-Amz-Expires"][0].isdigit():
|
|
|
+ return False
|
|
|
+ signature = query_params["X-Amz-Signature"][0]
|
|
|
+ if not re.match(r"^[A-Za-z0-9+/]+={0,2}$", signature):
|
|
|
+ return False
|
|
|
+
|
|
|
+ return True
|
|
|
+
|
|
|
+ return check_presign_v4(query_params) or check_presign_v2(query_params)
|
|
|
except Exception:
|
|
|
return False
|
|
|
|