¿Cómo obtener la IP del cliente mediante una aplicación Symfony 4 alojado en aplicación web de Azure

Cid:

Quiero para registrar todos los intentos de inicio de sesión en una aplicación web (Symfony 4.1) alojados en Azure.

En base a esta pregunta , para obtener la IP del cliente, estoy usando:

// $requestStack being Symfony\Component\HttpFoundation\RequestStack
$ip = $this->requestStack->getMasterRequest()->getClientIp();

Sin embargo, los registros dicen:

[03/10/2020 10:55:56] login_attempt.INFO: El usuario 'nombre de usuario' iniciado la sesión correctamente desde ip '172.16.1.1' [] []

Como se puede comprender, ésta es una IP privada . Traté de iniciar sesión desde conexiones diferentes, pero siempre estoy haciendo que la propiedad intelectual, 172.16.1.1. ¿De dónde viene esta IP viene y cómo conseguir la verdadera IP pública del cliente?

Cid:

Eso IP privada puede ser un equilibrador de carga o un proxy inverso.

A partir de la documentación :

Al implementar su aplicación, puede estar detrás de un equilibrador de carga (por ejemplo, un AWS Elastic Load Balancing) o un proxy inverso (por ejemplo Barniz para el almacenamiento en caché).

En su mayor parte, esto no causa ningún problema con Symfony. Pero, cuando una solicitud pasa a través de un proxy, cierta información solicitud se envía utilizando el estándar de Forwardedcabecera o X-Forwarded-*cabeceras. Por ejemplo, en lugar de leer la REMOTE_ADDRcabecera (que ahora será la dirección IP de su servidor proxy inverso), la verdadera IP del usuario se almacena en una norma Forwarded: for="..."de cabecera o una X-Forwarded-Forcabecera .

Si no configura Symfony para buscar estas cabeceras, obtendrá información incorrecta sobre la dirección IP del cliente, si el cliente se conecta a través de HTTPS, se solicitan puerto del cliente y el nombre de host.

Para solucionar esto, se puede añadir que la propiedad intelectual en los proxies de confianza de la aplicación.

En Symfony 4, esto se puede hacer de esta manera:

// index.php

// creates the $_SERVER['TRUSTED_PROXIES'] entry if it doesn't exist/is empty with the IP of the proxy to trust as value
// or append ',the ip' to the existing entry
$_SERVER['TRUSTED_PROXIES'] = (empty($_SERVER['TRUSTED_PROXIES']) ? '' : ($_SERVER['TRUSTED_PROXIES'] . ',')) . '172.16.1.1';

// This is already in index.php, just let it doing its job
if ($trustedProxies = $_SERVER['TRUSTED_PROXIES'] ?? false) {
    Request::setTrustedProxies(explode(',', $trustedProxies), Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST);
}

Y ahora, en los registros de:

[03/10/2020 13:09:06] login_attempt.INFO: El usuario 'nombre de usuario' iniciado la sesión correctamente desde ip ' la dirección IP pública ' [] []

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=343096&siteId=1
Recomendado
Clasificación