CakePHP3.2.4 -> 3.2.5에서 변경된 $this->request->clientIp() 정보

CakePHP3.2.5에서 Cake\Network\Request::clientIp()가 변경되었고 HTTP_CLIENT_IP를 보는 것은 Request::trustProxytrue 일 때만되었습니다. ( HTTP_CLIENT_IP 는 위장될 우려가 있기 때문에.)

그래서 로드 밸런서나 프록시를 통한 경우,
$this->request->trustProxy = true;
$clientIp = $this->request->clientIp();

라고 하면, 지금까지와 같이 HTTP_X_FORWARDED_FOR 이나 HTTP_CLIENT_IP 를 봅니다만, trustProxyfalse 의 경우(디폴트)라면, REMOTE_ADDR 만을 봅니다. (이전에는 HTTP_CLIENT_IP 이나 HTTP_CLIENTADDRESS 도 보고 있었다.)

그래서, 지금까지 $this->request->clientIp()를 사용하고 있던 것이 CakePHP3.2.5로의 버전 업으로 그대로 움직일지 어떨지는, 조금 확인이 필요하다고 생각합니다. (원래 REMOTE_ADDR 의 값이 사용되고 있었던 경우는 문제 없을 것.)

유닛 테스트 정보


clientIp() 를 사용하여 액세스 제어를하는 것과 같은 부분을 테스트하는 경우,

tests/TestCase/Controller/ArticlesControllerTest.php
public function testIpOk()
{
    $allowedIp = '192.168.1.1';
    $this->configRequest([
        'headers' => ['CLIENT_IP' => $allowedIp]
    ]);
    $this->get('/articles');
    $this->assertResponseOk();
}

라는 느낌으로, configRequest()headersCLIENT_IP 를 지정( HTTP_CLIENT_IP 가 세트 되게 된다) 하고 있었습니다만, 이것이라면 이번 갱신으로 clientIp() 로부터 값이 돌려주었습니다 오지 않습니다.headers 로 지정하면 마음대로 HTTP_ 가 머리에 붙이고 REMOTE_ADDR 를 지정하려면 어떻게 하면, , 라고 생각하면 environment 로 설정할 수 있었습니다.

tests/TestCase/Controller/ArticlesControllerTest.php
public function testIpOk()
{
    $allowedIp = '192.168.1.1';
    $this->configRequest([
        'environment' => ['REMOTE_ADDR' => $allowedIp]
    ]);
    $this->get('/articles');
    $this->assertResponseOk();
}

좋은 웹페이지 즐겨찾기