|
|
|
|
@ -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
|
|
|
|
|
|
|
|
|
|
|