¿En qué casos HTTP_REFERER estará vacío?
Sé que es posible obtener un HTTP_REFERER vacío. ¿En qué circunstancias sucede esto? Si obtengo uno vacío, ¿siempre significa que el usuario lo cambió? ¿Obtener uno vacío es lo mismo que obtener uno nulo? ¿Y bajo qué circunstancias me sale eso también?
Estará/puede estar vacío o parcial cuando el usuario final
- ingresó la URL del sitio en la barra de direcciones del navegador.
- visitó el sitio mediante un marcador mantenido por el navegador.
- visitó el sitio como primera página en una nueva ventana/pestaña/sesión, en algunos navegadores.
- hizo clic en un enlace en una página que tenía
<meta name="referrer">
una etiqueta restrictiva. - Hizo clic en un enlace en una página que tiene
Referrer-Policy
un encabezado restrictivo. - hizo clic en un enlace que tenía
rel="noreferrer"
. - hizo clic en un enlace en una aplicación externa (es decir, no en un navegador web, por ejemplo, Flash).
- cambió de una URL https a una URL http.
- tiene instalado un software de seguridad (antivirus/firewall/etc.) que elimina al remitente de todas las solicitudes.
- está detrás de un proxy que elimina al referente de todas las solicitudes.
- visitó el sitio mediante programación (como, curl) sin configurar el encabezado de referencia (¡bots!).
HTTP_REFERER: enviado por el navegador, indicando la última página que vio el navegador.
Si confías en [HTTP_REFERER] por algún motivo importante, no deberías hacerlo, ya que se puede falsificar fácilmente:
- Algunos navegadores limitan el acceso para no permitir que se pase HTTP_REFERER
- Escribir una dirección en la barra de direcciones no pasará el HTTP_REFERER
- abrir una nueva ventana del navegador no pasará HTTP_REFERER, porque HTTP_REFERER = NULL
- tiene algún complemento del navegador que lo bloquea por razones de privacidad. Algunos firewalls y antivirus sí lo hacen.
Pruebe esta extensión de Firefox, podrá configurar los encabezados que desee:
@Maestro de la Celebración:
Firefox:
extensiones: refspoof , refontrol , modificar encabezados , sin referencia
Deshabilitar completamente: la opción está disponible en about:config en "network.http.sendRefererHeader" y desea establecerla en 0 para deshabilitar el paso de referencia.
Google Chrome / Cromo:
extensiones: noref , spoofy , noreferrer externo
Deshabilite completamente: Cambie ~/.config/google-chrome/Default/Preferences o ~/.config/chromium/Default/Preferences y configure esto:
{
...
"enable_referrers": false,
...
}
O simplemente agregue --no-referrers al acceso directo o en cli:
google-chrome --no-referrers
Ópera:
Deshabilite completamente: Configuración > Preferencias > Avanzado > Red y desmarque "Enviar información de referencia"
Servicio web de suplantación de identidad:
http://referer.us/
Proxy de filtrado independiente (falsifica cualquier encabezado):
privado
Falsificación de http_referer al usar wget
'--referente=url'
Falsificación de http_referer cuando se usa curl
-e, --referente
Falsificación de http_referer con telnet
telnet www.yoursite.com 80 (press return)
GET /index.html HTTP/1.0 (press return)
Referer: http://www.hah-hah.com (press return)
(press return again)
También estará vacío si se utiliza el nuevo borrador estándar de la Política de referencia para evitar que el encabezado de referencia se envíe al origen de la solicitud. Ejemplo:
<meta name="referrer" content="none">
Aunque Chrome y Firefox ya han implementado una versión borrador de la Política de referencia, debes tener cuidado con ella porque, por ejemplo, Chrome espera no-referrer
en lugar de none
(y también lo he visto never
en alguna parte).
La lista de BalusC es sólida. Una forma adicional en la que este campo aparece frecuentemente vacío es cuando el usuario está detrás de un servidor proxy. Esto es similar a estar detrás de un firewall, pero es ligeramente diferente, así que quería mencionarlo para que esté completo.