diff --git a/extlib/OAuth.php b/extlib/OAuth.php index e9c4bdfaec..9dc9a99b75 100644 --- a/extlib/OAuth.php +++ b/extlib/OAuth.php @@ -85,7 +85,23 @@ abstract class OAuthSignatureMethod { */ public function check_signature($request, $consumer, $token, $signature) { $built = $this->build_signature($request, $consumer, $token); - return $built == $signature; + + // Check for zero length, although unlikely here + if (strlen($built) == 0 || strlen($signature) == 0) { + return false; + } + + if (strlen($built) != strlen($signature)) { + return false; + } + + // Avoid a timing leak with a (hopefully) time insensitive compare + $result = 0; + for ($i = 0; $i < strlen($signature); $i++) { + $result |= ord($built{$i}) ^ ord($signature{$i}); + } + + return $result == 0; } } @@ -243,7 +259,7 @@ class OAuthRequest { ? 'http' : 'https'; $http_url = ($http_url) ? $http_url : $scheme . - '://' . $_SERVER['HTTP_HOST'] . + '://' . $_SERVER['SERVER_NAME'] . ':' . $_SERVER['SERVER_PORT'] . $_SERVER['REQUEST_URI']; @@ -383,7 +399,7 @@ class OAuthRequest { $scheme = (isset($parts['scheme'])) ? $parts['scheme'] : 'http'; $port = (isset($parts['port'])) ? $parts['port'] : (($scheme == 'https') ? '443' : '80'); - $host = (isset($parts['host'])) ? $parts['host'] : ''; + $host = (isset($parts['host'])) ? strtolower($parts['host']) : ''; $path = (isset($parts['path'])) ? $parts['path'] : ''; if (($scheme == 'https' && $port != '443') diff --git a/lib/oauthclient.php b/lib/oauthclient.php index e14f673392..0233a4b2be 100644 --- a/lib/oauthclient.php +++ b/lib/oauthclient.php @@ -118,18 +118,17 @@ class OAuthClient if (isset($confirm)) { if ($confirm == 'true') { - common_debug('Twitter bridge - callback confirmed.'); return $token; } else { throw new OAuthClientException( - 'Callback was not confirmed by Twitter.' + 'Callback was not confirmed by remote OAuth side.' ); } } return $token; } else { throw new OAuthClientException( - 'Could not get a request token from Twitter.' + 'Could not get a request token from remote OAuth side.' ); } } @@ -181,7 +180,7 @@ class OAuthClient return $token; } else { throw new OAuthClientException( - 'Could not get a access token from Twitter.' + 'Could not get a access token from remote OAuth side.' ); } }