PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.3.1
GiveWP – Donation Plugin and Fundraising Platform v3.3.1
4.16.7.1 4.16.7 4.16.6.1 4.16.6 4.16.5.1 4.16.5 4.16.4 4.16.3 4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / vendor / vendor-prefixed / symfony / http-foundation / IpUtils.php
give / vendor / vendor-prefixed / symfony / http-foundation Last commit date
Exception 2 years ago File 2 years ago Session 2 years ago Tests 2 years ago AcceptHeader.php 2 years ago AcceptHeaderItem.php 2 years ago ApacheRequest.php 2 years ago BinaryFileResponse.php 2 years ago Cookie.php 2 years ago ExpressionRequestMatcher.php 2 years ago FileBag.php 2 years ago HeaderBag.php 2 years ago IpUtils.php 2 years ago JsonResponse.php 2 years ago LICENSE 2 years ago ParameterBag.php 2 years ago RedirectResponse.php 2 years ago Request.php 2 years ago RequestMatcher.php 2 years ago RequestMatcherInterface.php 2 years ago RequestStack.php 2 years ago Response.php 2 years ago ResponseHeaderBag.php 2 years ago ServerBag.php 2 years ago StreamedResponse.php 2 years ago
IpUtils.php
160 lines
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 *
11 * Modified by impress-org on 23-January-2024 using Strauss.
12 * @see https://github.com/BrianHenryIE/strauss
13 */
14
15 namespace Give\Vendors\Symfony\Component\HttpFoundation;
16
17 /**
18 * Http utility functions.
19 *
20 * @author Fabien Potencier <fabien@symfony.com>
21 */
22 class IpUtils
23 {
24 private static $checkedIps = [];
25
26 /**
27 * This class should not be instantiated.
28 */
29 private function __construct()
30 {
31 }
32
33 /**
34 * Checks if an IPv4 or IPv6 address is contained in the list of given IPs or subnets.
35 *
36 * @param string $requestIp IP to check
37 * @param string|array $ips List of IPs or subnets (can be a string if only a single one)
38 *
39 * @return bool Whether the IP is valid
40 */
41 public static function checkIp($requestIp, $ips)
42 {
43 if (!\is_array($ips)) {
44 $ips = [$ips];
45 }
46
47 $method = substr_count($requestIp, ':') > 1 ? 'checkIp6' : 'checkIp4';
48
49 foreach ($ips as $ip) {
50 if (self::$method($requestIp, $ip)) {
51 return true;
52 }
53 }
54
55 return false;
56 }
57
58 /**
59 * Compares two IPv4 addresses.
60 * In case a subnet is given, it checks if it contains the request IP.
61 *
62 * @param string $requestIp IPv4 address to check
63 * @param string $ip IPv4 address or subnet in CIDR notation
64 *
65 * @return bool Whether the request IP matches the IP, or whether the request IP is within the CIDR subnet
66 */
67 public static function checkIp4($requestIp, $ip)
68 {
69 $cacheKey = $requestIp.'-'.$ip;
70 if (isset(self::$checkedIps[$cacheKey])) {
71 return self::$checkedIps[$cacheKey];
72 }
73
74 if (!filter_var($requestIp, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV4)) {
75 return self::$checkedIps[$cacheKey] = false;
76 }
77
78 if (false !== strpos($ip, '/')) {
79 list($address, $netmask) = explode('/', $ip, 2);
80
81 if ('0' === $netmask) {
82 return self::$checkedIps[$cacheKey] = filter_var($address, \FILTER_VALIDATE_IP, \FILTER_FLAG_IPV4);
83 }
84
85 if ($netmask < 0 || $netmask > 32) {
86 return self::$checkedIps[$cacheKey] = false;
87 }
88 } else {
89 $address = $ip;
90 $netmask = 32;
91 }
92
93 if (false === ip2long($address)) {
94 return self::$checkedIps[$cacheKey] = false;
95 }
96
97 return self::$checkedIps[$cacheKey] = 0 === substr_compare(sprintf('%032b', ip2long($requestIp)), sprintf('%032b', ip2long($address)), 0, $netmask);
98 }
99
100 /**
101 * Compares two IPv6 addresses.
102 * In case a subnet is given, it checks if it contains the request IP.
103 *
104 * @author David Soria Parra <dsp at php dot net>
105 *
106 * @see https://github.com/dsp/v6tools
107 *
108 * @param string $requestIp IPv6 address to check
109 * @param string $ip IPv6 address or subnet in CIDR notation
110 *
111 * @return bool Whether the IP is valid
112 *
113 * @throws \RuntimeException When IPV6 support is not enabled
114 */
115 public static function checkIp6($requestIp, $ip)
116 {
117 $cacheKey = $requestIp.'-'.$ip;
118 if (isset(self::$checkedIps[$cacheKey])) {
119 return self::$checkedIps[$cacheKey];
120 }
121
122 if (!((\extension_loaded('sockets') && \defined('AF_INET6')) || @inet_pton('::1'))) {
123 throw new \RuntimeException('Unable to check Ipv6. Check that PHP was not compiled with option "disable-ipv6".');
124 }
125
126 if (false !== strpos($ip, '/')) {
127 list($address, $netmask) = explode('/', $ip, 2);
128
129 if ('0' === $netmask) {
130 return (bool) unpack('n*', @inet_pton($address));
131 }
132
133 if ($netmask < 1 || $netmask > 128) {
134 return self::$checkedIps[$cacheKey] = false;
135 }
136 } else {
137 $address = $ip;
138 $netmask = 128;
139 }
140
141 $bytesAddr = unpack('n*', @inet_pton($address));
142 $bytesTest = unpack('n*', @inet_pton($requestIp));
143
144 if (!$bytesAddr || !$bytesTest) {
145 return self::$checkedIps[$cacheKey] = false;
146 }
147
148 for ($i = 1, $ceil = ceil($netmask / 16); $i <= $ceil; ++$i) {
149 $left = $netmask - 16 * ($i - 1);
150 $left = ($left <= 16) ? $left : 16;
151 $mask = ~(0xffff >> $left) & 0xffff;
152 if (($bytesAddr[$i] & $mask) != ($bytesTest[$i] & $mask)) {
153 return self::$checkedIps[$cacheKey] = false;
154 }
155 }
156
157 return self::$checkedIps[$cacheKey] = true;
158 }
159 }
160