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