-
Notifications
You must be signed in to change notification settings - Fork 65
Description
Hello,
I found a bug in the authentification, it may be complicated to reproduce, but i will try to provides as many details as possible.
I am using this package in a php-slim4 application, the application is hosted on AWS with an ALB (application load balancer) in a very standard format. For strange reasons, the Authorization header is duplicated and $request->getHeaderLine('Authorization') return Basic cm9vdDp0MDBy,Basic cm9vdDp0MDBy.
I use a Psr\Http\Message\MessageInterface and the getHeaderLine() description state: Retrieves a comma-separated string of the values for a single header.
Here is the function in slim/psr7/message.php
public function getHeaderLine($name): string
{
$values = $this->headers->getHeader($name);
return implode(',', $values);
}
In this (rare) case, the following code doesn't match anything and the authorization fail
if (preg_match("/Basic\s+(.*)$/i", $request->getHeaderLine("Authorization"), $matches)) {
$explodedCredential = explode(":", base64_decode($matches[1]), 2);
if (count($explodedCredential) == 2) {
list($params["user"], $params["password"]) = $explodedCredential;
}
}
I believe i can find a workaround to prevent the duplication of the header, however i think the authorization in the package can be broken because the getHeaderLine can return a coma separated string instead of the header.
The solution can be: explode(",", getHeaderLine('Authorization')) and loop through the result
I have made some research and it seems the RFC (https://tools.ietf.org/html/rfc7235#appendix-C) permit multiple entries in the authorization header, separated by a coma.
If the problem/solution seems relevant, i can make a PR