2009-07-20 15 views
6

Tengo un widget de Javascript que las personas pueden insertar en su sitio.PHP - Fuente (nombre de host) de una solicitud GET

Deseo utilizar una solicitud simple de obtención de dominio cruzado para obtener un hash.

Sin embargo, necesito mi script PHP para permitir solo esta solicitud de dominio cruzado de una serie de dominios que he almacenado en una matriz.

¿Qué puedo hacer en mi script PHP (no en .htaccess o iptables) para averiguar la fuente (nombre de host) de la solicitud get?

+0

$ _SERVER ['REMOTE_HOST'] no funciona, ya que devuelve los detalles del cliente (usuarios web) y no los detalles del sitio web que realiza la solicitud GET, que es lo que necesito. –

Respuesta

2

Puede usar la variable $_SERVER. En particular, el $ _SERVER [REMOTE_HOST], pero ver más abajo para salvedad:

Sin embargo, el servidor web debe ser configurado para crear esta variable. Por ejemplo, en Apache necesitará BusnameLookups En el interior de httpd.conf para que exista. Consulte también gethostbyaddr().

+0

$ _SERVER ['REMOTE_HOST'] contiene la dirección (búsqueda dns) del _cliente_ que realizó la solicitud. No estoy seguro de que esa sea la respuesta ... – VolkerK

+0

Gracias por sus respuestas, pero el problema es lo que dice Volker, que devuelve la dirección del cliente, no el host o la ip del sitio que realiza la solicitud. –

1

Si las solicitudes provienen de JavaScript, puede verificar el encabezado HTTP referente ($ _SERVER ['HTTP_REFERER']). Sin embargo, es opcional: algunos proxies o programas de seguridad eliminan el encabezado de referencia de las solicitudes HTTP.

+0

Y tampoco es confiable ya que cualquier cliente puede enviar una referencia arbitraria o ninguna en absoluto, ver p. https://addons.mozilla.org/en-US/firefox/addon/953. – VolkerK

4

Teniendo en cuenta el cliente (navegador del usuario), puede enviar lo que quiera, yo diría que no hay manera de estar seguro de qué página web la secuencia de comandos se llama desde:

  • Como usted quiere saber la URL de el sitio web de la incrustación de su widget, y no la dirección del usuario, $_SERVER['REMOTE_HOST'] no ayudarán
  • $_SERVER['HTTP_REFERER'] podría parecer bien, pero en realidad no lo es:
    • el cliente no tiene que enviar (y que doesn' t siempre lo hace)
    • Como es enviado por el cliente, que puede ser forjado/falsificada con bastante facilidad

Por lo tanto, yo diría que no hay una solución real a este problema, al menos en el lado del servidor (Si estoy equivocado, estoy interesado en saber)

Pero tal vez pueda hacer algo en el lado del cliente: al escribir todo esto, pensé en los mapas de Google, y es el sistema de API Key:

  • tiene una clave API (única) cuatro su dominio
  • Cuando carga las secuencias de comandos JS de google, envíe esta clave
  • si la clave no está registrada para el dominio en el que intenta mostrar el mapa, hay un mensaje alert, que dice "El servidor API de Google Maps rechazó su solicitud. Esto podría deberse a que la clave API utilizada en este sitio se registró para un sitio web diferente. "
    • pero el mapa parece que se mostrará todos modos - al menos en mi servidor de prueba
  • este alert es realmente anoying para el usuario final, y yo no creo que nadie lo haría quieren una alerta que aparece en su sitio porque están utilizando su autorización withot servicio ...

Tal vez se puede echar un vistazo a cómo se hace esto para google maps :-)

Cuestiones relacionadas