| @@ 153-169 (lines=17) @@ | ||
| 150 | * |
|
| 151 | * @dataProvider proxyMethodWhitelistProvider |
|
| 152 | */ |
|
| 153 | public function testValidWhitelistedProxyMethod($remoteAddr) |
|
| 154 | { |
|
| 155 | $lookup = new Whip( |
|
| 156 | Whip::PROXY_HEADERS, |
|
| 157 | array( |
|
| 158 | Whip::PROXY_HEADERS => array( |
|
| 159 | IpWhitelist::IPV4 => array('127.0.0.1'), |
|
| 160 | IpWhitelist::IPV6 => array('::1') |
|
| 161 | ) |
|
| 162 | ), |
|
| 163 | array( |
|
| 164 | 'REMOTE_ADDR' => $remoteAddr, |
|
| 165 | 'HTTP_X_FORWARDED_FOR' => '192.168.1.1,32.32.32.32' |
|
| 166 | ) |
|
| 167 | ); |
|
| 168 | $this->assertEquals('32.32.32.32', $lookup->getIpAddress()); |
|
| 169 | } |
|
| 170 | ||
| 171 | /** |
|
| 172 | * Repeats the above test twice for ipv4 and ipv6 |
|
| @@ 186-206 (lines=21) @@ | ||
| 183 | * Tests that we accept proxy method based on a whitelisted IP using the |
|
| 184 | * dashed range notation. |
|
| 185 | */ |
|
| 186 | public function testValidWhitelistedProxyMethodWithDashNotation() |
|
| 187 | { |
|
| 188 | $lookup = new Whip( |
|
| 189 | Whip::PROXY_HEADERS, |
|
| 190 | array( |
|
| 191 | Whip::PROXY_HEADERS => array( |
|
| 192 | IpWhitelist::IPV4 => array( |
|
| 193 | '127.0.0.0-127.0.255.255', |
|
| 194 | ), |
|
| 195 | IpWhitelist::IPV6 => array( |
|
| 196 | '::1' |
|
| 197 | ) |
|
| 198 | ) |
|
| 199 | ), |
|
| 200 | array( |
|
| 201 | 'REMOTE_ADDR' => '127.0.0.1', |
|
| 202 | 'HTTP_X_FORWARDED_FOR' => '32.32.32.32' |
|
| 203 | ) |
|
| 204 | ); |
|
| 205 | $this->assertEquals('32.32.32.32', $lookup->getIpAddress()); |
|
| 206 | } |
|
| 207 | ||
| 208 | /** |
|
| 209 | * Tests that we accept proxy method based on a whitelisted IP using the |
|
| @@ 212-232 (lines=21) @@ | ||
| 209 | * Tests that we accept proxy method based on a whitelisted IP using the |
|
| 210 | * wildcard asterix notation. |
|
| 211 | */ |
|
| 212 | public function testValidWhitelistedProxyMethodWithWildcardNotation() |
|
| 213 | { |
|
| 214 | $lookup = new Whip( |
|
| 215 | Whip::PROXY_HEADERS, |
|
| 216 | array( |
|
| 217 | Whip::PROXY_HEADERS => array( |
|
| 218 | IpWhitelist::IPV4 => array( |
|
| 219 | '127.0.*' |
|
| 220 | ), |
|
| 221 | IpWhitelist::IPV6 => array( |
|
| 222 | '::1' |
|
| 223 | ) |
|
| 224 | ) |
|
| 225 | ), |
|
| 226 | array( |
|
| 227 | 'REMOTE_ADDR' => '127.0.0.1', |
|
| 228 | 'HTTP_X_FORWARDED_FOR' => '32.32.32.32' |
|
| 229 | ) |
|
| 230 | ); |
|
| 231 | $this->assertEquals('32.32.32.32', $lookup->getIpAddress()); |
|
| 232 | } |
|
| 233 | ||
| 234 | /** |
|
| 235 | * Tests that we accept proxy method based on a whitelisted IP using the |
|
| @@ 238-258 (lines=21) @@ | ||
| 235 | * Tests that we accept proxy method based on a whitelisted IP using the |
|
| 236 | * CIDR address notation. |
|
| 237 | */ |
|
| 238 | public function testValidWhitelistedProxyMethodWithCIDRdNotation() |
|
| 239 | { |
|
| 240 | $lookup = new Whip( |
|
| 241 | Whip::PROXY_HEADERS, |
|
| 242 | array( |
|
| 243 | Whip::PROXY_HEADERS => array( |
|
| 244 | IpWhitelist::IPV4 => array( |
|
| 245 | '127.0.0.0/24' |
|
| 246 | ), |
|
| 247 | IpWhitelist::IPV6 => array( |
|
| 248 | '::1' |
|
| 249 | ) |
|
| 250 | ) |
|
| 251 | ), |
|
| 252 | array( |
|
| 253 | 'REMOTE_ADDR' => '127.0.0.1', |
|
| 254 | 'HTTP_X_FORWARDED_FOR' => '32.32.32.32' |
|
| 255 | ) |
|
| 256 | ); |
|
| 257 | $this->assertEquals('32.32.32.32', $lookup->getIpAddress()); |
|
| 258 | } |
|
| 259 | ||
| 260 | /** |
|
| 261 | * Tests that we get false if there is a valid IP in a proxy header but |
|
| @@ 264-284 (lines=21) @@ | ||
| 261 | * Tests that we get false if there is a valid IP in a proxy header but |
|
| 262 | * we reject it due to REMOTE_ADDR not being in the whitelist. |
|
| 263 | */ |
|
| 264 | public function testValidIpRejectedDueToWhitelist() |
|
| 265 | { |
|
| 266 | $lookup = new Whip( |
|
| 267 | Whip::PROXY_HEADERS, |
|
| 268 | array( |
|
| 269 | Whip::PROXY_HEADERS => array( |
|
| 270 | IpWhitelist::IPV4 => array( |
|
| 271 | '127.0.0.1/24' |
|
| 272 | ), |
|
| 273 | IpWhitelist::IPV6 => array( |
|
| 274 | '::1' |
|
| 275 | ) |
|
| 276 | ) |
|
| 277 | ), |
|
| 278 | array( |
|
| 279 | 'REMOTE_ADDR' => '24.24.24.24', |
|
| 280 | 'HTTP_X_FORWARDED_FOR' => '32.32.32.32' |
|
| 281 | ) |
|
| 282 | ); |
|
| 283 | $this->assertFalse($lookup->getIpAddress()); |
|
| 284 | } |
|
| 285 | ||
| 286 | /** |
|
| 287 | * Tests that we reject a proxy listed IPv6 address that does not fall within |
|
| @@ 381-402 (lines=22) @@ | ||
| 378 | /** |
|
| 379 | * Test a custom header with a whitelisted IP. |
|
| 380 | */ |
|
| 381 | public function testCustomHeader() |
|
| 382 | { |
|
| 383 | $lookup = new Whip( |
|
| 384 | Whip::CUSTOM_HEADERS | Whip::REMOTE_ADDR, |
|
| 385 | array( |
|
| 386 | Whip::CUSTOM_HEADERS => array( |
|
| 387 | IpWhitelist::IPV4 => array( |
|
| 388 | '127.0.0.1', |
|
| 389 | '::1' |
|
| 390 | ) |
|
| 391 | ) |
|
| 392 | ), |
|
| 393 | array( |
|
| 394 | 'REMOTE_ADDR' => '127.0.0.1', |
|
| 395 | 'HTTP_CUSTOM_SECRET_HEADER' => '32.32.32.32' |
|
| 396 | ) |
|
| 397 | ); |
|
| 398 | $this->assertEquals( |
|
| 399 | '32.32.32.32', |
|
| 400 | $lookup->addCustomHeader('HTTP_CUSTOM_SECRET_HEADER')->getIpAddress() |
|
| 401 | ); |
|
| 402 | } |
|
| 403 | ||
| 404 | /** |
|
| 405 | * Test HTTP_X_REAL_IP header. |
|