/** * Check if the URI is valid * * Note that a relative URI may still be valid * * @access public * @return bool */ public function isValid() { if ($this->isValidEmptyUri() === true) { $isValid = true; } else { $isValid = parent::isValid(); } return $isValid; }
public function getRedirect($urlString, $stayLocal = true, $preserveHttps = true) { /** * Check that the URL has the correct format expected of a valid HTTP * or HTTPS URL. If so, normalize the URL. */ $valid = false; $url = new Uri(); try { $url->parse($urlString); if ($url->isValid() && $url->isAbsolute()) { $url->normalize(); $valid = true; } } catch (\Exception $e) { } if (false === $valid) { throw new Exception\InvalidArgumentException("Given value was not a valid absolute HTTP(S) URL: " . $url); } /** * Make sure we don't redirect from HTTPS to HTTP unless flagged by * the user. Using a Strict-Transport-Security header helps too! */ if (true === (bool) $preserveHttps && HttpsDetector::isHttpsRequest()) { if (!$this->isHttps($url)) { throw new Exception\InvalidArgumentException("Given value was not a HTTPS URL as expected: " . $url); } } /** * Check if the URL meets the local host restriction unless disabled */ if (true === $stayLocal && !$this->isLocal($url)) { throw new Exception\InvalidArgumentException("Given value was not a local HTTP(S) URL: " . $url); } /** * Check if the URL host exists on a whitelist of allowed hosts */ $whitelist = $this->getWhitelist(); if (!empty($whitelist) && !$this->isWhitelisted($url)) { throw new Exception\InvalidArgumentException("Given value was not a whitelisted URL as expected: " . $url); } /** * Get URL string after URL encoding checks and return a Location header * object. */ $header = new Header\Location(array('url' => $url->toString(), 'status_code' => 302)); return $header; }
public static function isDocumentHref($href) { if (empty($href) || stripos($href, 'mail') !== false || stripos($href, '.pdf') !== false || stripos($href, '.ppt') !== false || substr($href, 0, 10) === 'javascript' || substr($href, 0, 1) === '#') { return false; } foreach (['%20', '='] as $c) { if (stripos($href, $c . 'http://') !== false) { return false; } } $zendUri = new Uri($href); if ($zendUri->isValid()) { return true; } return false; }
/** * Test that invalid URIs fail validation * * @param \Zend\Uri\Uri $uri * @dataProvider invalidUriObjectProvider */ public function testInvalidUriIsInvalid(Uri $uri) { $this->assertFalse($uri->isValid()); }
/** * Check if the URI is valid * * @return bool */ public function isValid() { return $this->uri->isValid(); }