2011-03-15 20 views
7

Tengo una página que acepta POST desde un sitio remoto. Me gustaría detectar el dominio del que provienen estos POST. Me doy cuenta de que puede ser falso, pero es mejor que nada. He intentado acceder a la variable HTTP_REFERER pero simplemente devuelve null.PHP HTTP Referrer

La página acepta POST de fuentes como PayPal (notificaciones de pago instantáneo) y otras pasarelas de pago.

¿Cómo puedo obtener la llamada de referencia?

+0

se trata de un error tipográfico, pero al parecer no la tuya http://en.wikipedia.org/wiki/HTTP_referrer –

+0

HTTP es un protocolo sin estado, entienda eso y no confíe en algo establecido por un navegador –

+0

Estoy de acuerdo con usted completamente, no se procesará ninguna IPN a menos que esté autenticada como lo sugirieron las personas. Solo me gustaría saber de dónde proviene la solicitud, así sé qué autenticación usar. – aaronfarr

Respuesta

7

Has escrito Referer correctamente. Debe ser:

$_SERVER['HTTP_REFERER'] 
+0

Referente es la palabra inglesa, pero en PHP es Referer. – AbiusX

6
$_SERVER['HTTP_REFERER'] 

con una sola R, intente var_dump ($ _ SERVER) para obtener más información.

+0

Gracias, eso fue un error tipográfico en la pregunta. Todavía no devuelve nada en el código. ¡Extraño! – aaronfarr

+0

Podría ser simplemente nulo. No todos los navegadores envían referers – AbiusX

2

Tiene razón en que la referencia es fácil de falsificar, sin embargo, hay una solución mejor. Lea el ipn documentation en el que mencionan mecanismos de validación. Nunca confíes en el usuario.

+0

Gracias. Han implementado las IPNs correctamente. Pero me gustaría utilizar la misma página para filtrar otras IPN que no sean paypal. Así que usar el referer parecía una forma lógica de hacerlo. ¿Alguna sugerencia de cómo se podría hacer esto? – aaronfarr

2

Esto funciona para mí bastante bien:

https://stackoverflow.com/a/17958676/2635701

<form action="http://www.yourdomain.com/subscribe" 
    method="POST" 
    onsubmit= 
     "document.getElementById('www.yourdomain.com.referrer').value=window.location;" > 
    <!-- hidden input for field starts with a domain registered by you 
    just so that it's unlikely to clash with anything else on the page --> 
    <input type="hidden" id="www.yourdomain.com.referrer" name="referrer"/> 
    your email: <input name="email" type="text"/> 
    ... rest of form ... 
    <input type="submit" value="Subscribe"/> 
</form> 
+0

¿Qué sucede si javascript está deshabilitado? – codingpuss