2009-09-01 19 views
36

Después de algunas pruebas, estoy empezando a llegar a la conclusión de que un navegador no envía un encabezado HTTP Referer cuando hace clic en una página http desde una https.¿Se envía el Remitente de cabecera HTTP al ir a una página http desde una página https?

¿Para qué es la razón de seguridad? ¿Está definido en algún lugar del estándar?

+0

En cualquier caso, es totalmente en manos del cliente si Referer debe establecerse o no. –

+1

@Brian: pero los clientes deben seguir/respetar el RFC que define el protocolo que están usando. –

+0

La respuesta aceptada es una buena respuesta, pero es la misma que la respuesta de @ avid que se publicó anteriormente. – mikemaccana

Respuesta

53

Los HTTP RFC estados, en la sección 15.1.3 Encoding Sensitive Information in URI's:

Los clientes NO DEBEN incluir un campo de encabezado Reformista en una solicitud HTTP (no segura) HTTP si la página de referencia fue transferida con un protocolo seguro.

Por lo tanto, se espera/comportamiento estándar.

+2

Ok, entonces, ¿cómo y por qué google envía referer desde https a sitios no seguros? – confiq

+2

@confiq porque dice 'NO DEBE'? –

17

Sí, definido en el standard:

Los clientes no deben incluir un campo de cabecera Referer en una petición HTTP (no seguro) si la página de referencia se transfiere con un protocolo seguro

+2

Voy a agregar un poco de explicación, https URL a menudo contienen información sensible, como sessionid, número de cuenta, etc. Por supuesto, esto es malo incluso sobre SSL, pero todavía está hecho ... Y de todos modos, las sesiones HTTPS son usualmente aplicaciones sensibles, no hay razón para exponer innecesariamente esa información. – AviD

4

Motivo: A veces, los ID de sesión están codificados en la URL. Las páginas HTTP pueden tener scripts cruzados que roban la sesión de la comunicación HTTPS. Para evitar esto, el referente no se transmite en la transición de HTTPS a HTTP, por lo que no se puede robar el identificador de sessin con codificación URL.

+0

op está pidiendo http -> https, no al revés. – dsas

+2

@dsas "cuando uno hace clic en una página http desde un https uno" significa https -> http, no http -> https. –

+0

@JohnPick tienes razón, por supuesto, no estoy seguro de cómo lo leí mal. – dsas

19

En realidad, ya no es tan sencillo (2014 en adelante), según este w3c document on referrer policy.

El comportamiento predeterminado es que los navegadores no envían información de referencia cuando van de HTTPS a HTTP. Sin embargo, los navegadores enviarán referencias cuando va de HTTPS a HTTPS.

Además, en HTML5, hay una nueva etiqueta meta llamado de referencia, que se ve así:

<meta name="referrer" content="origin"> 

New browsers have already implemented this. Entonces, si los navegadores enviarán referrer o no, dependerá de esta metaetiqueta en el futuro cercano. Si esta metaetiqueta no está incluida en el HTML de la página, los navegadores utilizarán el comportamiento predeterminado.

Los siguientes son los posibles valores de atributo de contenido del remitente etiqueta meta:

  • sin remitente: Referente no será enviado, independientemente de HTTP HTTPS origen o
  • : Sólo el origen de dominio (principal) será enviado como referente
  • origen -cuando-crossorigin: lo mismo origen enviará URL de referencia completa y origen cruz enviará solamente el URL de origen como de referencia
  • sin remitente-cuando-rebaja: Este es el comportamiento por defecto cuando no hay referente metaetiqueta se proporciona en la página.
  • insegura-url: Este enviará siempre referente, independientemente de HTTP o HTTPS

Además, hay algunas legado valores de atributos para la etiqueta meta de referencia.Estos ya no son recomendables, sino que se utiliza en muchos sitios en la actualidad

  • que nunca: lo mismo que sin referente
  • por defecto: lo mismo que sin remitente-cuando-rebaja
  • siempre: lo mismo que insegura url

Espero que esta información será útil para alguien que acaba de encontrar este post después de 2014.

+0

Buena sugerencia. Sin embargo, no funciona en todos los dispositivos. :(El Chrome en PC/Mac funciona bien. Pero Chrome en ** Andorid ** ¡NO funciona! – Kane

Cuestiones relacionadas