Fixed url parsing for unicode characters.

This commit is contained in:
Simon Sessingø
2017-08-23 21:04:11 +01:00
parent ea255baec3
commit 65c811356d
14 changed files with 41 additions and 32 deletions
@@ -41,9 +41,9 @@ class BaseCsrfVerifier implements IMiddleware
$url = rtrim($url, '/');
if ($url[strlen($url) - 1] === '*') {
$url = rtrim($url, '*');
$skip = (stripos($request->getUri(), $url) === 0);
$skip = (stripos($request->getUri()->getPath(), $url) === 0);
} else {
$skip = ($url === rtrim($request->getUri(), '/'));
$skip = ($url === $request->getUri()->getPath());
}
if ($skip === true) {
+5 -5
View File
@@ -29,8 +29,8 @@ class Request
public function __construct()
{
$this->parseHeaders();
$this->host = $this->getHeader('http-host');
$this->uri = urldecode($this->getHeader('request-uri'));
$this->setHost($this->getHeader('http-host'));
$this->setUri(new Uri($this->getHeader('request-uri')));
$this->input = new Input($this);
$this->method = strtolower($this->input->get('_method', $this->getHeader('request-method'), 'post'));
}
@@ -58,7 +58,7 @@ class Request
}
/**
* @return string
* @return Uri
*/
public function getUri()
{
@@ -215,9 +215,9 @@ class Request
}
/**
* @param string $uri
* @param Uri $uri
*/
public function setUri($uri)
public function setUri(Uri $uri)
{
$this->uri = $uri;
}
+1 -1
View File
@@ -41,7 +41,7 @@ class Response
public function refresh()
{
$this->redirect($this->request->getUri());
$this->redirect($this->request->getUri()->getPath());
}
/**
+10 -3
View File
@@ -20,6 +20,11 @@ class Uri
{
$this->originalUrl = $url;
$this->data = array_merge($this->data, $this->parseUrl($url));
if (isset($this->data['path']) === true && $this->data['path'] !== '/') {
$this->data['path'] = rtrim($this->data['path'], '/') . '/';
}
}
/**
@@ -122,12 +127,14 @@ class Uri
/**
* UTF-8 aware parse_url() replacement.
* @param string $url
* @param int $component
* @throws \InvalidArgumentException
* @return array
*/
public function parseUrl($url)
public function parseUrl($url, $component = -1)
{
$enc_url = preg_replace_callback(
$encodedUrl = preg_replace_callback(
'%[^:/@?&=#]+%u',
function ($matches) {
return urlencode($matches[0]);
@@ -135,7 +142,7 @@ class Uri
$url
);
$parts = parse_url($enc_url);
$parts = parse_url($encodedUrl, $component);
if ($parts === false) {
throw new \InvalidArgumentException('Malformed URL: ' . $url);