diff --git a/flight/net/Request.php b/flight/net/Request.php index 0db3b33..3baefe1 100644 --- a/flight/net/Request.php +++ b/flight/net/Request.php @@ -46,7 +46,7 @@ class Request { 'base' => str_replace('\\', '/', dirname(getenv('SCRIPT_NAME'))), 'method' => getenv('REQUEST_METHOD') ?: 'GET', 'referrer' => getenv('HTTP_REFERER') ?: '', - 'ip' => $this->getIpAddress(), + 'ip' => getenv('REMOTE_ADDR'), 'ajax' => getenv('HTTP_X_REQUESTED_WITH') == 'XMLHttpRequest', 'scheme' => getenv('SERVER_PROTOCOL') ?: 'HTTP/1.1', 'user_agent' => getenv('HTTP_USER_AGENT') ?: '', @@ -56,7 +56,10 @@ class Request { 'query' => new Collection($_GET), 'data' => new Collection($_POST), 'cookies' => new Collection($_COOKIE), - 'files' => new Collection($_FILES) + 'files' => new Collection($_FILES), + 'secure' => getenv('HTTPS') && getenv('HTTPS') != 'off', + 'accept' => getenv('HTTP_ACCEPT'), + 'proxy' => $this->getProxyIpAddress() ); } @@ -109,28 +112,25 @@ class Request { * * @return string IP address */ - private function getIpAddress() { - static $vars = array( + private function getProxyIpAddress() { + static $forwarded = array( 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', - 'HTTP_FORWARDED', - 'REMOTE_ADDR' + 'HTTP_FORWARDED' ); + $flags = \FILTER_FLAG_NO_PRIV_RANGE | \FILTER_FLAG_NO_RES_RANGE; - foreach ($vars as $key) { - if (array_key_exists($key, $_SERVER) === true) { - foreach (explode(',', $_SERVER[$key]) as $ip) { - if (filter_var($ip, FILTER_VALIDATE_IP) !== false) { - return $ip; - } + foreach ($forwarded as $key) { + if (array_key_exists($key, $_SERVER)) { + sscanf($_SERVER[$key], '%[^,]', $ip); + if(filter_var($ip, FILTER_VALIDATE_IP, $flags) !== false) { + return $ip; } } } - - return ''; } } ?>