Foros del Web » Programando para Internet » Javascript » Frameworks JS »

Peticiones AJAX legítimas del servidor (con PHP por ejemplo)

Estas en el tema de Peticiones AJAX legítimas del servidor (con PHP por ejemplo) en el foro de Frameworks JS en Foros del Web. Sé que quizá sea un tema muy manido ya..., de hecho, el post que me arrojó más luz sobre el asunto se cerró (creo que ...
  #1 (permalink)  
Antiguo 30/09/2008, 07:54
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 20 años, 7 meses
Puntos: 1
Peticiones AJAX legítimas del servidor (con PHP por ejemplo)

Sé que quizá sea un tema muy manido ya..., de hecho, el post que me arrojó más luz sobre el asunto se cerró (creo que debería haberse dejado abierto) si bien por las formas quizá esté mejor así.

---

La cuestión... pues es esa:
Aunque creo que es imposible por ahora: cómo legitimar peticiones AJAX del propio servidor para una URL accesible por el navegador.

PROBLEMA:
El problema o los problemas que estoy teniendo en todas mis pruebas es que siempre, como es lógico, mediante cualquier cliente HTTP (por ejemplo usando cUrl) puedes suplantar todos los métodos que intentan verificar si es una petición legítima. O sea:
Si es accesible por url con un navegador, es de cualquier modo suplantable pues los clientes http suelen funcionar igual.

SOLUCIONES:
Las soluciones a las que siempre llego se reducen en un chequeo por tiempo para destruir la validez si ha expirado... pero no lo veo útil.

EJEMPLO:
El ejemplo en el que más me baso sobre este problema es un buscador que arroja resultados AJAX.

Se envía el formulario junto con un «token» (o varios) válido por... pongamos 5 minutos. Pero esto genera el problema de que expire la validez de tiempo (generado en el formulario) sin que el usuario haya intentado buscar nada aún, así que tendrá que recargar la página sin saber porqué. Es decir, si en 5 minutos sigue ahí y aún no ha buscado, cuando lo haga tendrá que recargar.

Complicaciones:
Que JavaScript genere el token tiene el problema de que se ve en el cliente.
Que php genere el token tiene el problema de ser estático... además de que se pueden ver también métodos tanto por sesiones como post, headers, etc...

Posible solución:
Sólo se me ocurrió tener un generador de tokens que pueda ser llamado desde JS para generar un nuevo token con cada petición (de forma asíncrona)... el problema es que volvemos a lo mismo: si no es un script fuera de la raíz del servidor o inaccesible, también se podrá acceder a él y generar tokens. Es la pescadilla que se muerde la cola desde luego.

Así:
Se puede suplantar la petición con el único consuelo de que «el suplantador» ¬¬ deberá volver al script original en 5 minutos para copiar el nuevo token.


---

En cualquier caso... lo veo muy complicado y quería preguntar si alguien, al margen de seguridad básica en ese script de servidor, sea accesible o no, tiene algún método que suele usar o conoce más o menos seguro :S

No me refiero, como es lógico, a una técnica mágica, sino a una estrategia común o más o menos estándar. Ejemplos...:
Wordpress usa wp_check_ajax_referer() pero por medio de usuarios legítimos en el backend, algunas técnicas RoR usan chequeo por tiempos... ¿es imposible realmente?

Gracias de antemano por vuestras respuestas... esto me está matando xDD
__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org

Última edición por Covids0020; 30/09/2008 a las 08:06
  #2 (permalink)  
Antiguo 30/09/2008, 14:13
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Peticiones AJAX legítimas del servidor (con PHP por ejemplo)

Como tu lo dices, puedes lo mejor es checar el Referrer, pero no es un dato fiable, otra opción es usar sesiones, aunque no tengas que loggear al usuario, si en tu script en el server checas la sesion y sabes que el usuario tiene una sesion valida, si intenta entrar directo al AJAX puedes mostrarle un mensaje de error.

Saludos.
  #3 (permalink)  
Antiguo 14/01/2011, 00:56
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 9 meses
Puntos: 21
Respuesta: Peticiones AJAX legítimas del servidor (con PHP por ejemplo)

puedes validar
usando esto

http://blogdesarrollo.com/codigo/200...icion-es-ajax/

puedes agregar otras validaciones pero esta seria una de ellas

saludos

Cita:
Iniciado por Covids0020 Ver Mensaje
Sé que quizá sea un tema muy manido ya..., de hecho, el post que me arrojó más luz sobre el asunto se cerró (creo que debería haberse dejado abierto) si bien por las formas quizá esté mejor así.

---

La cuestión... pues es esa:
Aunque creo que es imposible por ahora: cómo legitimar peticiones AJAX del propio servidor para una URL accesible por el navegador.

PROBLEMA:
El problema o los problemas que estoy teniendo en todas mis pruebas es que siempre, como es lógico, mediante cualquier cliente HTTP (por ejemplo usando cUrl) puedes suplantar todos los métodos que intentan verificar si es una petición legítima. O sea:
Si es accesible por url con un navegador, es de cualquier modo suplantable pues los clientes http suelen funcionar igual.

SOLUCIONES:
Las soluciones a las que siempre llego se reducen en un chequeo por tiempo para destruir la validez si ha expirado... pero no lo veo útil.

EJEMPLO:
El ejemplo en el que más me baso sobre este problema es un buscador que arroja resultados AJAX.

Se envía el formulario junto con un «token» (o varios) válido por... pongamos 5 minutos. Pero esto genera el problema de que expire la validez de tiempo (generado en el formulario) sin que el usuario haya intentado buscar nada aún, así que tendrá que recargar la página sin saber porqué. Es decir, si en 5 minutos sigue ahí y aún no ha buscado, cuando lo haga tendrá que recargar.

Complicaciones:
Que JavaScript genere el token tiene el problema de que se ve en el cliente.
Que php genere el token tiene el problema de ser estático... además de que se pueden ver también métodos tanto por sesiones como post, headers, etc...

Posible solución:
Sólo se me ocurrió tener un generador de tokens que pueda ser llamado desde JS para generar un nuevo token con cada petición (de forma asíncrona)... el problema es que volvemos a lo mismo: si no es un script fuera de la raíz del servidor o inaccesible, también se podrá acceder a él y generar tokens. Es la pescadilla que se muerde la cola desde luego.

Así:
Se puede suplantar la petición con el único consuelo de que «el suplantador» ¬¬ deberá volver al script original en 5 minutos para copiar el nuevo token.


---

En cualquier caso... lo veo muy complicado y quería preguntar si alguien, al margen de seguridad básica en ese script de servidor, sea accesible o no, tiene algún método que suele usar o conoce más o menos seguro :S

No me refiero, como es lógico, a una técnica mágica, sino a una estrategia común o más o menos estándar. Ejemplos...:
Wordpress usa wp_check_ajax_referer() pero por medio de usuarios legítimos en el backend, algunas técnicas RoR usan chequeo por tiempos... ¿es imposible realmente?

Gracias de antemano por vuestras respuestas... esto me está matando xDD
__________________
gerardo
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 09:21.