2009-01-09 9 views
18

¿Es posible verificar quién está ingresando a su sitio web en PHP? Tengo una aplicación web (escrita en PHP) que solo debería permitir a los usuarios ingresar desde algunos sitios web en particular. ¿Es posible obtener los sitios web de referencia examinando el objeto _Request? Si es así, ¿cómo?Inspeccione la referencia en PHP

Respuesta

29

Sí, pero tenga en cuenta que algunos proxies y otras cosas eliminan esta información, y se puede falsificar fácilmente. Así que nunca confíes en eso. Por ejemplo, no crea que su aplicación web es segura desde CSRF porque marca la referencia para que coincida con su propio servidor.

$referringSite = $_SERVER['HTTP_REFERER']; // is that spelt wrong in PHP ? 

Si desea permitir sólo las peticiones de un dominio específico que tendrá que analizar algunas de las URL para obtener el dominio de nivel superior. Como he aprendido más, esto se puede hacer con PHP parse_url().

Como andyk señala en los comentarios, también tendrá que permitir www.example.com y example.com.

+0

es posible que desee tener precaución adicional, ya que probablemente deba permitir tanto www.example.com como example.com, ya que, en la mayoría de los casos, es lo mismo. Sin mencionar que HTTP_REFERER no es realmente confiable. – andyk

+1

del manual de php, "Esto lo establece el agente de usuario. No todos los agentes de usuario lo configurarán, y algunos ofrecen la posibilidad de modificar HTTP_REFERER como una función. En resumen, no se puede confiar". – andyk

+0

Sí, sé que no se puede confiar. – alex

0

Necesita examinar la matriz $ _SERVER para la clave 'HTTP_REFERER'.

6

Mientras que usted puede mirar $_SERVER['HTTP_REFERER'] para obtener el sitio que refiere, no apueste la granja en él. El navegador establece este encabezado y es fácilmente falsificado.

Si es fundamental que solo las personas que provienen de referentes específicos vean su sitio, no use este método. Deberá buscar otra forma, como autenticación básica, para proteger su contenido. No digo que no deba usar esta técnica, solo tenga en cuenta que no es infalible.

Por cierto, también puede bloquear las referencias en el nivel de Apache using mod_rewrite.

4

No puede confiar en la referencia. A pesar de proceder de la matriz $_SERVER, en realidad se trata de un valor suministrado por el usuario/navegador y se puede falsificar fácilmente, usando cosas como Firefox RefControl addon.

+0

Sí FF no está apoyándolo. Estoy a la caza de alternativas. – BenRacicot

Cuestiones relacionadas