Subversion-Projekte lars-tiefland.laravel_shop

Revision

Revision 148 | Details | Vergleich mit vorheriger | Letzte Änderung | Log anzeigen | RSS feed

Revision Autor Zeilennr. Zeile
148 lars 1
<?php
2
 
3
namespace Illuminate\Http\Middleware;
4
 
5
use Closure;
6
use Illuminate\Http\Request;
7
 
8
class TrustProxies
9
{
10
    /**
11
     * The trusted proxies for the application.
12
     *
399 lars 13
     * @var array<int, string>|string|null
148 lars 14
     */
15
    protected $proxies;
16
 
17
    /**
18
     * The proxy header mappings.
19
     *
20
     * @var int
21
     */
22
    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;
23
 
24
    /**
25
     * Handle an incoming request.
26
     *
27
     * @param  \Illuminate\Http\Request  $request
28
     * @param  \Closure  $next
29
     * @return mixed
30
     *
31
     * @throws \Symfony\Component\HttpKernel\Exception\HttpException
32
     */
33
    public function handle(Request $request, Closure $next)
34
    {
35
        $request::setTrustedProxies([], $this->getTrustedHeaderNames());
36
 
37
        $this->setTrustedProxyIpAddresses($request);
38
 
39
        return $next($request);
40
    }
41
 
42
    /**
43
     * Sets the trusted proxies on the request.
44
     *
45
     * @param  \Illuminate\Http\Request  $request
46
     * @return void
47
     */
48
    protected function setTrustedProxyIpAddresses(Request $request)
49
    {
50
        $trustedIps = $this->proxies() ?: config('trustedproxy.proxies');
51
 
52
        if ($trustedIps === '*' || $trustedIps === '**') {
53
            return $this->setTrustedProxyIpAddressesToTheCallingIp($request);
54
        }
55
 
56
        $trustedIps = is_string($trustedIps)
57
                ? array_map('trim', explode(',', $trustedIps))
58
                : $trustedIps;
59
 
60
        if (is_array($trustedIps)) {
61
            return $this->setTrustedProxyIpAddressesToSpecificIps($request, $trustedIps);
62
        }
63
    }
64
 
65
    /**
66
     * Specify the IP addresses to trust explicitly.
67
     *
68
     * @param  \Illuminate\Http\Request  $request
69
     * @param  array  $trustedIps
70
     * @return void
71
     */
72
    protected function setTrustedProxyIpAddressesToSpecificIps(Request $request, array $trustedIps)
73
    {
74
        $request->setTrustedProxies($trustedIps, $this->getTrustedHeaderNames());
75
    }
76
 
77
    /**
78
     * Set the trusted proxy to be the IP address calling this servers.
79
     *
80
     * @param  \Illuminate\Http\Request  $request
81
     * @return void
82
     */
83
    protected function setTrustedProxyIpAddressesToTheCallingIp(Request $request)
84
    {
85
        $request->setTrustedProxies([$request->server->get('REMOTE_ADDR')], $this->getTrustedHeaderNames());
86
    }
87
 
88
    /**
89
     * Retrieve trusted header name(s), falling back to defaults if config not set.
90
     *
91
     * @return int A bit field of Request::HEADER_*, to set which headers to trust from your proxies.
92
     */
93
    protected function getTrustedHeaderNames()
94
    {
95
        return match ($this->headers) {
96
            'HEADER_X_FORWARDED_AWS_ELB', Request::HEADER_X_FORWARDED_AWS_ELB => Request::HEADER_X_FORWARDED_AWS_ELB,
97
            'HEADER_FORWARDED', Request::HEADER_FORWARDED => Request::HEADER_FORWARDED,
98
            'HEADER_X_FORWARDED_FOR', Request::HEADER_X_FORWARDED_FOR => Request::HEADER_X_FORWARDED_FOR,
99
            'HEADER_X_FORWARDED_HOST', Request::HEADER_X_FORWARDED_HOST => Request::HEADER_X_FORWARDED_HOST,
100
            'HEADER_X_FORWARDED_PORT', Request::HEADER_X_FORWARDED_PORT => Request::HEADER_X_FORWARDED_PORT,
101
            'HEADER_X_FORWARDED_PROTO', Request::HEADER_X_FORWARDED_PROTO => Request::HEADER_X_FORWARDED_PROTO,
102
            'HEADER_X_FORWARDED_PREFIX', Request::HEADER_X_FORWARDED_PREFIX => Request::HEADER_X_FORWARDED_PREFIX,
103
            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,
104
        };
105
    }
106
 
107
    /**
108
     * Get the trusted proxies.
109
     *
110
     * @return array|string|null
111
     */
112
    protected function proxies()
113
    {
114
        return $this->proxies;
115
    }
116
}