request_uri - Determinar Referer en PHP
php server referer (5)
¿Cuál es la forma más confiable y segura de determinar qué página se envió o se llamó (a través de AJAX) a la página actual? No quiero usar $_SERVER[''HTTP_REFERER'']
, debido a la (falta de) confiabilidad, y necesito que la página a la que se llama solo provenga de solicitudes que se originen en mi sitio.
Editar: estoy buscando verificar que un script que preforma una serie de acciones se llame desde una página en mi sitio web.
El REFERER es enviado por el navegador del cliente como parte del protocolo HTTP, y por lo tanto no es confiable. Puede que no esté allí, podría estar falsificado, simplemente no puedes confiar si es por razones de seguridad.
Si desea verificar si una solicitud proviene de su sitio, no puede hacerlo, pero puede verificar que el usuario haya estado en su sitio y / o que esté autenticado. Las cookies se envían en solicitudes AJAX para que pueda confiar en eso.
Lo que he encontrado mejor es un token de CSRF y lo guardo en la sesión para los enlaces donde necesita verificar el referente.
Entonces, si está generando una devolución de llamada FB, se vería así:
$token = uniqid(mt_rand(), TRUE);
$_SESSION[''token''] = $token;
$url = "http://example.com/index.php?token={$token}";
Entonces el index.php se verá así:
if(empty($_GET[''token'']) || $_GET[''token''] !== $_SESSION[''token''])
{
show_404();
}
//Continue with the rest of code
Sé de sitios seguros que hacen el equivalente de esto para todas sus páginas seguras.
No hay una manera confiable de verificar esto. Está realmente bajo la mano del cliente decirte de dónde vino. Se puede imaginar el uso de cookies o información de sesiones que se publican solo en algunas páginas de su sitio web, pero al hacerlo, se rompería la experiencia del usuario con los marcadores.
Solo tenemos una opción después de leer todos los problemas de referencia falsos: es decir, la página que deseamos rastrear como referencia debe mantenerse en sesión, y como ajax llamada y luego registrar sesión si tiene valor de página de referencia y hacer la acción de otra manera no acción.
Mientras que, por otro lado, al solicitar cualquier página diferente, el valor de la sesión de referencia será nulo.
Recuerde que la variable de sesión está configurada solo en la solicitud de página de deseo.
Usando $_SERVER [''HTTP_REFERER'']
La dirección de la página (si corresponde) que refería 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 proporcionan la capacidad de modificar HTTP_REFERER como característica. En resumen, realmente no se puede confiar.
if (!empty($_SERVER[''HTTP_REFERER''])) {
header("Location: " . $_SERVER[''HTTP_REFERER'']);
} else {
header("Location: index.php");
}
exit;