Foros del Web » Programando para Internet » PHP »

Restringir llamada a script, securizar

Estas en el tema de Restringir llamada a script, securizar en el foro de PHP en Foros del Web. Hola, Estoy haciendo unas llamadas json que me devuelven datos que posteriormente proceso. Estas llamadas json las realizo tanto por GET como por POST, una ...
  #1 (permalink)  
Antiguo 04/01/2012, 15:21
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Restringir llamada a script, securizar

Hola,

Estoy haciendo unas llamadas json que me devuelven datos que posteriormente proceso. Estas llamadas json las realizo tanto por GET como por POST, una de las ventajas de JSON es que te devuelve los resultados en un formato muy fácil de tratar y parsear.

Pero esto se convierte en un problema si piensas en las webs de la competencia que pueden ejecutar las mismas consultas (pq a través de firebug este tipo de peticiones se ven desde lejos) y obtener todos los datos que procesas y muestras "en bandeja".

Me gustaría saber si os habéis encontrado en una situación similar que queréis que la web sea pública pero que unicamente se puedan realizar peticiones json al script peticiones.php desde la propia web. Que si alguien intenta llamar a este script json no le devuelva ningun resultado o le redirija a la página 404

He pensado en bloquear las llamadas directas y sin venir del dominio de la web,

Código PHP:
Ver original
  1. if (($_SERVER['HTTP_REFERER'] == "") and ($_SERVER['HTTP_REFERER']!='www.miweb.com')){
  2.     die (Header ("Location: /404"));
  3.     exit;
  4. }

Pero todos sabemos que crear un site falso en local y hacer que vienes desde una página cuando en verdad no es cierto es sencillo.

¿Se os ocurren más ideas?

Muchas gracias de antemano
  #2 (permalink)  
Antiguo 04/01/2012, 15:44
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Restringir llamada a script, securizar

mmm creo que otra forma es usando un token en sesión, una llamada externa no podría propagar el token.
  #3 (permalink)  
Antiguo 04/01/2012, 17:10
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Restringir llamada a script, securizar

Uhmm... pero cómo lo harías?

Yo tengo un token de sesión que genero en mi fichero index.php

$token = md5(uniqid(rand(), true));
$_SESSION['Token'] = $token;

El problema es que cada vez que el visitante navega por la web, si cambia a otra sección de la web este token cambia. Porque toda la web gira entorno a mi fichero index.php

No veo la forma usando este token
  #4 (permalink)  
Antiguo 04/01/2012, 17:25
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Restringir llamada a script, securizar

podes bloquear con .htaccess todo acceso a tus php si el referer no es de tu propio sitio

Código Apache:
Ver original
  1. SetEnvIfNoCase Referer "^http://tudominio.com/" local_ref=1
  2. <FilesMatch "\.(php)$">
  3. Order Allow,Deny
  4. Allow from env=local_ref
  5. </FilesMatch>

convendria poner los php protegidos en una carpeta aparte, ya que si usas esto en la raiz, tu inicio no podria ser index.php, por ejemplo. Tambien podrias usar Files en lugar de FilesMatch.

Ejemplo
/index.php --> tiene un include a inc/a.php
/inc/a.php --> en esta carpeta el .htaccess con la restricción


De esa forma cualquier acceso a a.php que no fuera desde otra página del dominio arrojaría un error 403 (incluso el acceso directo via ingreso en la barra de direcciones en forma directa)

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #5 (permalink)  
Antiguo 05/01/2012, 01:11
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Restringir llamada a script, securizar

Veo muy restrictiva es politica.

¿No podría ser cualquier archivo .php del directorio /ajax? incluso se podría indicar el fichero concreto?

¿Habría algun problema con los buscadores?

Muchas gracias
  #6 (permalink)  
Antiguo 05/01/2012, 02:04
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Restringir llamada a script, securizar

Podes aplicarlo a un archivo específico

Código Apache:
Ver original
  1. <Files "x.php">
  2.  Order Allow,Deny
  3. Allow from env=local_ref
  4. </Files>

y todo es cuestión de que prioridad le des a la seguridad sobre otros aspectos
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #7 (permalink)  
Antiguo 06/01/2012, 14:22
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 15 años, 11 meses
Puntos: 528
Respuesta: Restringir llamada a script, securizar

Un token que se genere con un rand cada vez que cambias de página no sería muy práctico, yo tengo esta función que genera el token:

function token($dbname,$ip){
return sha1(session_id().phpversion().$dbname.$ip.$_SERVE R ['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT']);
}

No es estrictamente necesario pasarle el nombre de la bd y de la ip, aunque eso aumenta aún más la improbabilidad de que alguien genere un token igual.
  #8 (permalink)  
Antiguo 07/01/2012, 09:38
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Restringir llamada a script, securizar

Cita:
Iniciado por ocp001a Ver Mensaje
Un token que se genere con un rand cada vez que cambias de página no sería muy práctico, yo tengo esta función que genera el token:

function token($dbname,$ip){
return sha1(session_id().phpversion().$dbname.$ip.$_SERVE R ['REMOTE_ADDR'].$_SERVER['HTTP_USER_AGENT']);
}

No es estrictamente necesario pasarle el nombre de la bd y de la ip, aunque eso aumenta aún más la improbabilidad de que alguien genere un token igual.
Interesante tu comentario, no había pensado en los problemas de tener un token excesivamente random (que cambien en cada página para el mismo usuario...).

Probaré algo como me indicas.

Respecto a que no se puedan realizar peticiones a un script concreto, la única forma es la de incluir tantos <FILE> ....</FILE> como archivos quiera proteger?

Etiquetas: llamada, restringir
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:47.