auth: сверять X-Amz-Content-Sha256 с фактическим хэшем тела
This commit is contained in:
@@ -163,9 +163,14 @@ func verifyHeaderSigV4(r *http.Request, t *tenant.Tenant, authHeader string) err
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
actualHash := sha256Hex(body)
|
||||||
payloadHash := r.Header.Get("X-Amz-Content-Sha256")
|
payloadHash := r.Header.Get("X-Amz-Content-Sha256")
|
||||||
if payloadHash == "" {
|
if payloadHash == "" {
|
||||||
payloadHash = sha256Hex(body)
|
payloadHash = actualHash
|
||||||
|
} else if !strings.EqualFold(payloadHash, actualHash) && !strings.EqualFold(payloadHash, "UNSIGNED-PAYLOAD") {
|
||||||
|
// Заголовок заявлен, но не совпадает с фактическим хэшем тела: клиент
|
||||||
|
// не должен иметь возможность подменить тело под подписанным заголовком.
|
||||||
|
return errors.New("X-Amz-Content-Sha256 does not match body hash")
|
||||||
}
|
}
|
||||||
|
|
||||||
canonicalRequest, err := buildCanonicalRequest(r, signedHeaders, payloadHash, true)
|
canonicalRequest, err := buildCanonicalRequest(r, signedHeaders, payloadHash, true)
|
||||||
|
|||||||
Reference in New Issue
Block a user