Ver Mensaje Individual
  #2 (permalink)  
Antiguo 02/04/2008, 15:30
usermax
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 5 meses
Puntos: 11
Re: Evitar accesar directamente a un archivo .php que es llamado desde ajax

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