ZF3 Проблема с добавлением доверенных прокси в валидатор сеанса - PullRequest
0 голосов
/ 29 марта 2019

Я размещаю сайт Zend Framework 3 в MS Azure. Существует проблема с проверкой сеанса, поскольку шлюз приложений Azure действует как обратный прокси-сервер, который не нравится удаленному средству проверки адресов, поэтому сеанс не читается.

Я могу видеть из ссылки на класс для удаленного адреса, что есть метод setTrustedProxies() который, согласно документации, я могу передать массив IP-адресов. Однако я не очень понимаю, как это сделать.

Я настраиваю session_manager в global.php

'session_manager' => [
        // Session validators (used for security).
        'validators' => [
            RemoteAddr::class,
            HttpUserAgent::class,
        ],

    ],

Затем в Module.php я создаю экземпляр диспетчера сеансов, используя

$sessionManager = $serviceManager->get(SessionManager::class);

Затем я пытаюсь добавить доверенные прокси с использованием поддельных IP-адресов:

$sessionManager = $serviceManager->get(SessionManager::class);
$request        = $serviceManager->get('Request');
$remAdd = $request->getServer()->get('REMOTE_ADDR');
$remoteAddr = new RemoteAdddress($remAdd);
$remoteAddr->setTrustedProxies(['192.98.98.11', '187.2.2.10']);
$remoteAddr->setProxyHeader('X-Forwarded-For');
$remoteAddr->setUseProxy($useProxy = true);
$chain   = $sessionManager->getValidatorChain();
$chain->attach('session.validate', array($remoteAddr, 'isValid'));

Я почти уверен, что это неправильный способ сделать это, но я не могу найти в Интернете никакой документации по настройке доверенных прокси.

Если я сделаю

$chain   = $sessionManager->getValidatorChain();
print_r($chain);

после добавления прокси я не вижу ссылки на прокси в выводе

Zend\Session\ValidatorChain Object
(
    [events:protected] => Array
        (
            [session.validate] => Array
                (
                    [1] => Array
                        (
                            [0] => Array
                                (
                                    [0] => Array
                                        (
                                            [0] => Zend\Session\Validator\RemoteAddr Object
                                                (
                                                    [data:protected] => 127.0.0.1
                                                )

                                            [1] => isValid
                                        )

                                )

                        )

                )

        )

    [eventPrototype:protected] => Zend\EventManager\Event Object
        (
            [name:protected] => 
            [target:protected] => 
            [params:protected] => Array
                (
                )

            [stopPropagation:protected] => 
        )

    [identifiers:protected] => Array
        (
        )

    [sharedManager:protected] => 
    [storage:protected] => Zend\Session\Storage\SessionArrayStorage Object
        (
        )

)

Как я уже сказал, я почти уверен, что поступаю неправильно, поэтому буду очень благодарен за любую помощь в поиске правильного метода.

...