protected function validateRedirectUri($inputUri, $storedUris)
{
if (!$inputUri || !$storedUris) {
return false;
// if either one is missing, assume INVALID
}
$parsed = parse_url($inputUri);
if (!$parsed) {
return false;
}
if (isset($parsed['path'])) {
$path = urldecode($parsed['path']);
// check for 'path traversal'
if (preg_match('#/\\.\\.?(/|$)#', $path)) {
return false;
}
}
if (!is_array($storedUris)) {
$storedUris = array($storedUris);
}
foreach ($storedUris as $storedUri) {
if (strcasecmp(substr($inputUri, 0, strlen($storedUri)), $storedUri) === 0) {
return true;
}
}
return false;
}