Hay dos posibilidades en las que se puede acceder a tu archivo usado en ajax:
1) Acceder con la url directamente
2) Llamar el mismo archivo con ajax pero en otra página, que lo implementen en otro sitio que no sea el tuyo.
En el primer caso: en el de acceder directamente en la URL entonces la variable
Código PHP:
$_SERVER['HTTP_REFERER']
sería nula.
EN el caso en que se use en otra página por ajax y con un link común y corrienmte allí $_SERVER['HTTP_REFERER'] no estaría vacío pero la variable
Código PHP:
$_SERVER['HTTP_HOST']
no coincidiría con tu host.
Entonces teniendo en cuenta estos dos factores podemos hacer una función que haga todo por nosotros.
Código PHP:
function protectAjax() {
$reused = false;
if (!$_SERVER['HTTP_REFERER']) {
$reused = true; // Aquí se está intentando acceder directamente
}
else {
if ($_SERVER['HTTP_HOST'] != "www.midominio.com" && $_SERVER['HTTP_HOST'] != "midominio.com" ) {
$reused = true; // Aquí se implementó en otra página por medio de un link o en ajax
}
}
if ($reused === true) {
header("HTTP/1.0 404 Not Found");
echo '<h1>Not Found</h1>';
exit();
}
}
Reemplaza midominio.com por tu propio dominio
Ahora a la función la implementas en el encabezado de las páginas que quieras proteger:
Código PHP:
include_once("protect.php"); // Aquí tienes la función de arriba
protectAjax();
// Resto del código
Saludos