jugando con el encabezado de referencia

13

Hay 2 sitios:

http://www.site1.com
http://www.site2.com

http://www.site1.com contiene el enlace a http://www.site2.com as

<a href="http://www.site2.com/">link<a/>

Cuando el usuario hace clic en el enlace desde el navegador http://www.site1.com , el encabezado del remitente envía a http://www.site2.com . Basado en el encabezado de referencia http://www.site2.com realiza algunos procesos.

Me pregunto si puedo falsificar / cambiar (quizás con javascript, PHP, ...) ¿Encabezado del remitente o no enviarlo?

    
pregunta torayeff 12.01.2013 - 09:12
fuente

6 respuestas

27

Hay dos situaciones en las que querrías controlar el encabezado Referer . Por cierto, Referer es una falta de ortografía de la palabra "referente".

Si desea controlar su navegador personal para no pasar de Referer a site2.com , puede hacerlo con muchas extensiones de navegador:

La otra situación es cuando usted es un webmaster y quiere que los usuarios de su sitio (site1.com) no envíen el Referer a otros sitios vinculados. en tu sitio. Puedes hacerlo de varias maneras:

  • Use SSL / TLS (https) en su sitio y una función de seguridad del navegador no es pasar el Referer cuando usa SSL / TLS.
  • Utilice el atributo HTML5 rel="noreferrer" . Es compatible con por todos los principales navegadores.
  • Use una URL de datos ('data:') para ocultar la página real de la que proviene el enlace: <a href='data:text/html;charset=utf-8, <html><meta http-equiv="refresh" content="0;URL=&#39;http://site2.com/&#39;"></html>'>Link text</a> .
  • Oculte el Referer redirigiendo a través de una página intermedia. Este tipo de redirección se usa a menudo para evitar que los enlaces potencialmente maliciosos obtengan información utilizando el Referer , por ejemplo, un ID de sesión en la cadena de consulta. Muchos sitios web grandes de la comunidad utilizan la redirección de enlaces en enlaces externos para disminuir la posibilidad de una vulnerabilidad que podría usarse para robar información de la cuenta, así como aclarar cuándo un usuario está abandonando un servicio, para reducir la posibilidad de un phishing efectivo.

Aquí hay un ejemplo de redirección simplista en PHP:

<?php
$url = htmlspecialchars($_GET['url']);
header( 'Refresh: 0; url=http://'.$url );
?>
<html>
 <head>
  <title>Redirecting...</title>
  <meta http-equiv="refresh" content="0;url=http://<?php echo $url; ?>">
 </head>
 <body>
 Attempting to redirect to <a href="http://<?php echo $url; ?>">http://<?php echo $url; ?></a>.
 </body>
</html>
    
respondido por el Cristian Dobre 12.01.2013 - 12:49
fuente
8

A partir de 2015, esta es la forma en que evita que su sitio web envíe el encabezado del Referer:

Solo agréguelo a la sección principal de la página web:

 <meta name="referrer" content="no-referrer" />

Esto funciona tanto para los enlaces como para las solicitudes de Ajax hechas por el código JavaScript en la página.

Otras opciones válidas de meta incluyen:

<meta name="referrer" content="unsafe-url" />
<meta name="referrer" content="origin" />
<meta name="referrer" content="no-referrer-when-downgrade" />
<meta name="referrer" content="origin-when-cross-origin" />

• Comprueba si funciona para tu navegador aquí: enlace

• Consulte las especificaciones aquí: enlace

Nota: Si desea eliminar la referencia usando solo JavaScript, creo que podría agregar la meta etiqueta apropiada de forma dinámica justo antes de realizar la solicitud de Ajax. Sin embargo, no he probado esto.

También tenga en cuenta que los navegadores ahora envían el encabezado Origin que incluye el dominio y el puerto y, que yo sepa, no se pueden eliminar. Si usas <meta name="referrer" content="origin" /> la referencia contendrá Información similar a la cabecera Origin , que ya es buena desde el punto de vista de la privacidad, ya que ocultará la página exacta en la que se encuentra el usuario.

    
respondido por el MarcG 14.08.2015 - 18:06
fuente
3

No puede modificar el encabezado de referencia a menos que controle el cliente que llama, por ejemplo. el navegador.

Los navegadores bloquean la modificación del remitente, y el código del lado del servidor no puede insertar encabezados en una solicitud, ya que no hay manera de obtener el encabezado del servidor al cliente, y hacer que el cliente lo inyecte en el encabezado del remitente. siguiente solicitud.

Eso suponiendo que el navegador no tenga una vulnerabilidad particular en torno a la inyección de encabezado desde JavaScript.

    
respondido por el Steve 12.01.2013 - 09:28
fuente
0

Escribiría un script en python (consulte enlace para ver una gran biblioteca, si el urllib estándar parece complicado ) pero creo que usted sería capaz de falsificar el referer usando el complemento de cabecera http data / Live de Tamper para Firefox. No estoy seguro de eso, pero echa un vistazo. También hay otros complementos de Firefox que te permiten manipular el encabezado del remitente. Solo busca el referente en los complementos de Firefox.

    
respondido por el xeet 12.01.2013 - 09:56
fuente
0

Se puede encontrar una excelente descripción del problema de referencia y su historial en "Excluyendo referencias para diversión y beneficio" .

El mismo artículo también contiene excelentes enlaces a:

  1. Para los perezosos entre nosotros, el referer.us servicio de redirección de URL y, aún mejor,
  2. A secuencia de comandos del lado del cliente independiente del navegador , usando el increíble truco <iframe src=about:blank> .
respondido por el Serge Stroobandt 12.12.2013 - 15:23
fuente
0

No es difícil crear un encabezado HTTP.

Solo necesitas un terminal y algunos swiss knife como netcat (es una herramienta que te permite hacer cosas muy básicas, como cat en la red).

Algo como:

nc << eof www.site2.com 80
GET /somepath/somedest HTTP/1.0
Host: wwww.site2.com
Referer: wwww.site1.com

.
eof

Podría ser suficiente.

(Nota: el punto . al final es inútil, pero una línea vacía marca el final del encabezado)

Entonces la respuesta es sí es posible falsificar un encabezado HTTP.

Esto se hizo en Firefox 19.0

Para ocultar el campo de referencia, he utilizado una opción en el servidor proxy squid desde hace algunos años, pero estoy seguro de que deben existir algunos módulos o extensiones para un navegador que haría el truco ....

... Una vista rápida en mi configuración de Firefox (v19.0) me permite ver que hay una opción: network.http.sendRefererHeader .

Esta opción podría configurarse para:

  • 0 Nunca envíe el encabezado del Referer o configure document.referrer.
  • 1 Envíe el encabezado del Referer cuando haga clic en un enlace, y configure document.referrer para la siguiente página.
  • 2 (Predeterminado) Envíe el encabezado del Referer cuando haga clic en un enlace o cargue una imagen, y configure document.referrer para la siguiente página.
respondido por el F. Hauri 15.01.2013 - 22:55
fuente

Lea otras preguntas en las etiquetas