Skip to content

Commit 8fa7fa4

Browse files
committed
RequestFactory: drops complete cookie/post when contain invalid chars (+ is faster)
1 parent a2d40e5 commit 8fa7fa4

1 file changed

Lines changed: 7 additions & 17 deletions

File tree

src/Http/RequestFactory.php

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,10 @@ public function createHttpRequest(): Request
8181
}
8282

8383
// path & query
84+
$reChars = '#^[' . self::CHARS . ']*+\z#u';
8485
$requestUrl = $_SERVER['REQUEST_URI'] ?? '/';
8586
$requestUrl = preg_replace('#^\w++://[^/]++#', '', $requestUrl);
86-
if (!$this->binary && (!preg_match(self::CHARS, rawurldecode($requestUrl)) || preg_last_error())) {
87+
if (!$this->binary && (!preg_match($reChars, rawurldecode($requestUrl)) || preg_last_error())) {
8788
// TODO: invalid request
8889
}
8990
$requestUrl = Strings::replace($requestUrl, $this->urlFilters['url']);
@@ -109,24 +110,13 @@ public function createHttpRequest(): Request
109110
$cookies = $useFilter ? filter_input_array(INPUT_COOKIE, FILTER_UNSAFE_RAW) : (empty($_COOKIE) ? [] : $_COOKIE);
110111

111112
// remove invalid characters
112-
$reChars = '#^[' . self::CHARS . ']*+\z#u';
113113
if (!$this->binary) {
114-
$list = [&$post, &$cookies];
115-
foreach ($list as $key => &$val) {
116-
foreach ($val as $k => $v) {
117-
if (is_string($k) && (!preg_match($reChars, $k) || preg_last_error())) {
118-
unset($list[$key][$k]);
119-
120-
} elseif (is_array($v)) {
121-
$list[$key][$k] = $v;
122-
$list[] = &$list[$key][$k];
123-
124-
} else {
125-
$list[$key][$k] = (string) preg_replace('#[^' . self::CHARS . ']+#u', '', $v);
126-
}
127-
}
114+
if (!preg_match($reChars, rawurldecode(http_build_query($post))) || preg_last_error()) {
115+
$post = [];
116+
}
117+
if (!preg_match($reChars, rawurldecode(http_build_query($cookies))) || preg_last_error()) {
118+
$cookies = [];
128119
}
129-
unset($list, $key, $val, $k, $v);
130120
}
131121

132122

0 commit comments

Comments
 (0)