Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php
Строк: 68
<?php

namespace IlluminateHttpMiddleware;

use 
Closure;
use 
IlluminateHttpRequest;

class 
TrustProxies
{
    
/**
     * The trusted proxies for the application.
     *
     * @var array<int, string>|string|null
     */
    
protected $proxies;

    
/**
     * The proxy header mappings.
     *
     * @var int
     */
    
protected $headers Request::HEADER_X_FORWARDED_FOR Request::HEADER_X_FORWARDED_HOST Request::HEADER_X_FORWARDED_PORT Request::HEADER_X_FORWARDED_PROTO Request::HEADER_X_FORWARDED_PREFIX Request::HEADER_X_FORWARDED_AWS_ELB;

    
/**
     * Handle an incoming request.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  Closure  $next
     * @return mixed
     *
     * @throws SymfonyComponentHttpKernelExceptionHttpException
     */
    
public function handle(Request $requestClosure $next)
    {
        
$request::setTrustedProxies([], $this->getTrustedHeaderNames());

        
$this->setTrustedProxyIpAddresses($request);

        return 
$next($request);
    }

    
/**
     * Sets the trusted proxies on the request.
     *
     * @param  IlluminateHttpRequest  $request
     * @return void
     */
    
protected function setTrustedProxyIpAddresses(Request $request)
    {
        
$trustedIps $this->proxies() ?: config('trustedproxy.proxies');

        if (
is_null($trustedIps) && laravel_cloud()) {
            
$trustedIps '*';
        }

        if (
$trustedIps === '*' || $trustedIps === '**') {
            return 
$this->setTrustedProxyIpAddressesToTheCallingIp($request);
        }

        
$trustedIps is_string($trustedIps)
                ? 
array_map('trim'explode(','$trustedIps))
                : 
$trustedIps;

        if (
is_array($trustedIps)) {
            return 
$this->setTrustedProxyIpAddressesToSpecificIps($request$trustedIps);
        }
    }

    
/**
     * Specify the IP addresses to trust explicitly.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  array  $trustedIps
     * @return void
     */
    
protected function setTrustedProxyIpAddressesToSpecificIps(Request $request, array $trustedIps)
    {
        
$request->setTrustedProxies($trustedIps$this->getTrustedHeaderNames());
    }

    
/**
     * Set the trusted proxy to be the IP address calling this servers.
     *
     * @param  IlluminateHttpRequest  $request
     * @return void
     */
    
protected function setTrustedProxyIpAddressesToTheCallingIp(Request $request)
    {
        
$request->setTrustedProxies([$request->server->get('REMOTE_ADDR')], $this->getTrustedHeaderNames());
    }

    
/**
     * Retrieve trusted header name(s), falling back to defaults if config not set.
     *
     * @return int A bit field of Request::HEADER_*, to set which headers to trust from your proxies.
     */
    
protected function getTrustedHeaderNames()
    {
        if (
is_int($this->headers)) {
            return 
$this->headers;
        }

        return 
match ($this->headers) {
            
'HEADER_X_FORWARDED_AWS_ELB' => Request::HEADER_X_FORWARDED_AWS_ELB,
            
'HEADER_FORWARDED' => Request::HEADER_FORWARDED,
            
'HEADER_X_FORWARDED_FOR' => Request::HEADER_X_FORWARDED_FOR,
            
'HEADER_X_FORWARDED_HOST' => Request::HEADER_X_FORWARDED_HOST,
            
'HEADER_X_FORWARDED_PORT' => Request::HEADER_X_FORWARDED_PORT,
            
'HEADER_X_FORWARDED_PROTO' => Request::HEADER_X_FORWARDED_PROTO,
            
'HEADER_X_FORWARDED_PREFIX' => Request::HEADER_X_FORWARDED_PREFIX,
            default => 
Request::HEADER_X_FORWARDED_FOR Request::HEADER_X_FORWARDED_HOST Request::HEADER_X_FORWARDED_PORT Request::HEADER_X_FORWARDED_PROTO Request::HEADER_X_FORWARDED_PREFIX Request::HEADER_X_FORWARDED_AWS_ELB,
        };
    }

    
/**
     * Get the trusted proxies.
     *
     * @return array|string|null
     */
    
protected function proxies()
    {
        return 
$this->proxies;
    }
}
Онлайн: 1
Реклама