¿Por qué la cadena de su Agente de usuario en su navegador le dice a los servidores su sistema operativo y la versión del navegador?

Al hacer preguntas sobre cualquier cosa en HTTP, es útil mirar la especificación. En la especificación HTTP / 1.1, RFC 2616 (página en ietf.org), la sección 14.43 habla sobre el encabezado User-Agent:

El campo de encabezado de solicitud de agente de usuario contiene información sobre el agente de usuario que origina la solicitud. Esto es para fines estadísticos, el seguimiento de violaciones de protocolo y el reconocimiento automático de agentes de usuario en aras de adaptar las respuestas para evitar limitaciones particulares de agentes de usuario. Los agentes de usuario DEBEN incluir este campo con las solicitudes.

Dado que esto está escrito en IETF spec-ese, examinemos en un lenguaje más familiar.

Un “agente de usuario” es cualquier cosa que realiza solicitudes a través de HTTP. Más comúnmente, es su navegador web. Sin embargo, no tiene por qué ser así. Googlebot, el programa que Google utiliza para indexar páginas web para su motor de búsqueda, también es un “agente de usuario”.

La palabra “DEBE” en esa última oración tiene un significado especial. Eso significa que se recomienda que los agentes de usuario envíen este encabezado con sus solicitudes, pero no es obligatorio. (Si fuera obligatorio, habrían usado la palabra “DEBE”). Por lo tanto, es perfectamente legítimo que un navegador no lo envíe.

Mencionan tres razones para tener este encabezado:

  • Fines estadísticos . Esta es una pregunta que a muchos operadores de servidores les gustaría hacer: “¿Qué tipos de navegadores / dispositivos están usando este sitio?” Una buena razón podría ser que puede señalar tendencias de uso a las que quizás desee responder. Si los registros del servidor muestran que muchas personas que acceden a su sitio están usando iOS y Android, por ejemplo, podría ser una buena idea desarrollar un formato compatible con dispositivos móviles para su sitio.
  • Rastreo de violaciones de protocolo . Si usted, como operador del servidor, recibe solicitudes de algún cliente que están tan mal formateadas que bloquean su servidor, es posible que desee saber qué tipo de cliente envía esas solicitudes. De esa manera, puede enviar un informe de error al autor del cliente, o (lo más probable) detectar las solicitudes de esos clientes y cortarlas defensivamente antes de que puedan bloquear su servidor. Dado que HTTP es un protocolo bastante maduro en este momento, ya no es un problema tan grande.
  • Reconocimiento automatizado de agentes de usuario para adaptar las respuestas. Esto es de lo que se trata mucho el “rastreo del navegador” en estos días. Si alguien está haciendo una solicitud utilizando un navegador en modo de texto como Lynx, probablemente no desee enviar un montón de gráficos sofisticados y piratería de JavaScript que Lynx no puede entender de todos modos. Si alguien usa Internet Explorer, su navegador puede tener una implementación de JavaScript o DOM lo suficientemente diferente de Firefox o Chrome que podría tener sentido enviar una versión diferente de ese sofisticado JavaScript que usa. (O tal vez desee bloquear el uso de su sitio por completo, como lo hizo 4ormat: Bootstrapped Startup ahorra más de $ 100K al soltar IE | TechCrunch)

Todos estos están bien y bien; Si se hiciera alguna crítica a este elemento de la especificación, se podría llamar algo ingenuo, escrito en Antes de Tiempo, cuando las computadoras y sus programadores eran generalmente honestos. Como hemos visto, este ya no es el caso …

De hecho, el RFC en sí mismo menciona este problema. Todos los RFC deben tener una sección de “Consideraciones de seguridad”, y una de las cosas que RFC 2616 menciona es:

Los campos de encabezado User-Agent (sección 14.43) o Server (sección 14.38) a veces se pueden usar para determinar que un cliente o servidor específico tiene un agujero de seguridad particular que podría explotarse. Desafortunadamente, esta misma información a menudo se usa para otros propósitos valiosos para los cuales HTTP actualmente no tiene un mecanismo mejor.

En otras palabras, “sí, esto es malo, pero eliminarlo eliminaría todos los otros usos buenos , por lo que nos vemos obligados a dejarlo”.

Y, por supuesto, los agentes de usuario pueden mentir . De hecho, existen muchas extensiones de navegador (busque “User Agent Switcher” o similar) que tienen, como único y único propósito, enseñarle a su navegador cómo mentir sobre lo que es. Esto tiene una serie de propósitos legítimos, como desplazarse por un operador de servidor cuyo sitio dice “lo siento, necesita Internet Explorer para este sitio” (cuando ese no es realmente el caso, ya que las pocas cosas que hace que son específicas de IE no son t crítico), o probar cómo responde su propio servidor a diferentes agentes de usuario.

El hecho de que un agente de usuario pueda mentir hace un agujero en la respuesta anónima a esta pregunta al momento de escribir esto: “Porque la NSA tiene vulnerabilidades de seguridad para cada navegador y versión de cada sistema operativo”. (Además, la NSA probablemente tiene medios más sofisticados para saber qué sistema operativo y navegador está utilizando que simplemente mirar el encabezado User-Agent).

Aquellos que estén realmente preocupados deben mirar para ver si su navegador tiene una opción, o una extensión disponible, para suprimir el envío del encabezado User-Agent. Como hemos visto, esto es legal según la especificación HTTP / 1.1. El único inconveniente es que es posible que un sitio determinado ya no pueda enviarle contenido optimizado para un entorno específico, ya que no sabrá qué tipo de entorno tiene. Esto puede ser una compensación aceptable en la mayoría de las circunstancias.

Permite al servidor modificar la respuesta para adaptarse mejor a las necesidades del dispositivo. Por ejemplo, The New York Times se ve diferente en un teléfono que en una computadora de escritorio. Esto probablemente se logra mirando el campo del agente de usuario de la solicitud HTTP.

En general, es un punto de diseño muy importante de HTTP que una URL representa una información de manera abstracta, no una forma particular de formatear esa información. De esa manera, puede tomar la URL de un NYTimes que vio en su computadora portátil y enviársela a un amigo, y ella puede verla en su teléfono. El encabezado User Agent es parte de lo que hace esto posible.

Es mas que eso. User-Agent facilita la “huella digital” de usuarios individuales, lo cual es un gran problema de privacidad: la vergüenza secreta de Firefox.

Aunque User-Agent puede ser útil para algunas de las tareas que menciona Amy Bowersox, la implementación actual revela demasiada información.

Porque la NSA tiene vulnerabilidades de seguridad para cada navegador y versión de cada sistema operativo. Esencialmente, te estás haciendo un pato sentado si no proteges esta información. Los desarrolladores dirán que lo necesitan para la depuración, lo que puede ser cierto, pero esta información hace que sea increíblemente fácil explotar el navegador y el sistema operativo de los usuarios finales.