php - Prevención de la suplantación de referencias de cURL
spoofing (2)
No, no hay una forma definitiva de determinar la URL de referencia.
Según la especificación de HTTP , HTTP_REFERER
es opcional. Algunos paquetes de firewall los eliminan de manera predeterminada, algunos clientes no envían el valor de referencia y existen muchas formas (como la que mostró en la pregunta) para modificar este valor.
En resumen, el valor HTTP_REFERER
no se puede confiar. Siempre habrá alguna forma de modificar estos valores. Esto se menciona en la documentación del manual de PHP para $_SERVER
( énfasis mío):
La dirección de la página (si corresponde) que refirió al agente de usuario a la página actual. Esto es establecido por el agente de usuario. No todos los agentes de usuario configurarán esto, y algunos ofrecen la posibilidad de modificar HTTP_REFERER como una característica. En resumen, no se puede confiar realmente .
Para responder a su pregunta: no, no hay forma de evitar que se HTTP_REFERER
valor de HTTP_REFERER
. Le sugiero que verifique el valor antes de usarlo (opcionalmente, aplique htmlspecialchars()
para evitar la inyección) o no lo use en absoluto. Desafortunadamente, es un acuerdo de "tómalo o vete a casa".
Recibimos el código PHP de un desarrollador con un script de estadísticas web que se basa únicamente en $_SERVER[''HTTP_REFERER'']
. Con cURL, puedes falsificarlo fácilmente de la siguiente manera:
curl_setopt($curl, CURLOPT_REFERER, "client website");
y estoy buscando una manera de prevenirlo. Esto también puede ser realizado por el sitio web del cliente, para tener estadísticas más altas. Estoy buscando una manera de evitar esta falsificación. ¿Es esto posible en absoluto? Si es así, ¿cómo se puede lograr esto?
No hay nada que puedas hacer con este referrer
. Todos los scripts de web-stats
dependen de esta referrer
. Incluso los sitios web-stats
gigantes que incluyen google-analytics se dejan engañar por este falso referrer
.
Podría ser una buena solución revisar la URL de referencia. Me refiero a visitar al remitente y comprobar si su url existe allí o no. Pero, por supuesto, consume mucho tiempo, es lento y también requiere un gran ancho de banda. Sin embargo, no es suficiente para superar este problema.
Aquí hay algunos problemas en los que no encontrará su enlace cuando está rastreando la url de referencia:
¿Qué pasa si la url referida está detrás de la sesión? Por ejemplo, un enlace vino de un correo electrónico como Yahoo, Google o de un foro privado.
¿Qué pasa si la URL proviene de un enlace / clic
javascript
?Sin embargo, el enlace desde un
iframe
es un enlace dejavascript
.