hashService->appendHmac( serialize($payload), $additionalSecret, self::HASH_ALGO ); } public function deserialize(string $payload, string $additionalSecret): mixed { try { $serialized = $this->hashService->validateAndStripHmac( $payload, $additionalSecret, self::HASH_ALGO ); } catch (InvalidHashStringException $e) { $classNames = $this->deserializationService->parseClassNames($payload); // in case the payload does not contain any class names, continue with // a secure deserialization attempt, not allowing any class names if ($classNames === []) { return @unserialize($payload, ['allowed_classes' => false]); } throw new DeserializerException( 'Authenticated Message Deserialization failed', 1780317744, $e ); } // explicitly allowing all classes here after successful HMAC validation /* @phpstan-ignore unserialize.allowedClasses.insecure (Integrity check already happens via HMAC validation) */ return unserialize($serialized, ['allowed_classes' => true]); } }