AJAX significa: "una página web con algún código, y lo digo en serio". No existe una distinción clara entre AJAX y una página "normal", ya que las páginas normales también pueden tener elementos de secuencias de comandos. AJAX es más una forma de afirmar que tiene la intención de insertar algunas partes de su aplicación en el navegador del cliente.
Una aplicación basada en web se ejecuta a través de la unión del servidor y el cliente. Es tentador que el cliente haga algo más que mostrar las páginas enviadas por el servidor, porque:
- aumenta la reactividad de la interfaz (se mejora la experiencia del usuario);
- puede reducir la carga de la red (muchas operaciones basadas en GUI pueden realizarse en el cliente sin hablar con el servidor);
- puede reducir la carga informática (más trabajo para la máquina cliente, menos trabajo para el servidor).
Se puede hacer una analogía con los juegos en línea, por ejemplo, Con los juegos de FPS. Varios usuarios disparan entre sí. El servidor realiza un seguimiento de dónde está todo el mundo y quién mata a quién. Para tales juegos, la reactividad de la interfaz es de suma importancia; por lo tanto, es completamente inimaginable que el servidor calcule todo y simplemente envíe marcos para mostrar al cliente. En su lugar, los clientes deben hacer el trabajo pesado de renderizado 3D, y el servidor simplemente envía mapas de nivel y actualizaciones de posición del jugador.
En ese momento, la seguridad entra en juego, debido a la regla fundamental:
- Desde el punto de vista del servidor, el cliente es un villano.
En la analogía de los juegos, esto significa que el servidor debe confiar en el código del cliente: para la representación 3D, el cliente debe conocer el mapa de nivel y la posición de todos los demás jugadores. Sería fácil, para un cliente modificado, mostrar el mapa al jugador e identificar a los otros jugadores. En realidad, hay muchos tramposos por ahí, y los motores de juego utilizan sofisticadas técnicas de ofuscación de código para tratar de disuadir a la mayoría de ellos (porque los tramposos matan la diversión y, sin la diversión, los jugadores se van).
Esto ilustra lo que tiene la seguridad de AJAX: ya que es un código que se ejecuta en el lado del cliente, el servidor no puede confiar en lo que hace, incluso si el usuario está debidamente autenticado (sabiendo que who sí no lo hace automáticamente legítimo). Por lo general, esto no es un problema para las interacciones relacionadas con la GUI, a menos que haya problemas de seguridad en la GUI, como la función de "visualización del mapa de nivel" en la analogía de los juegos. La forma correcta de analizar la seguridad de las aplicaciones basadas en la Web es asumir que cada byte que emite el servidor es conocido por el cliente y que cada byte del cliente es potencialmente malicioso.
Como un ejemplo aproximado, considere la inyección SQL. Una forma de evitar los ataques de inyección de SQL es asegurarse de que el elemento de datos que inserta en su solicitud no tenga un carácter especial sin escapar. Este paso de validación DEBE se debe realizar en el servidor. No puede hacer eso de forma segura en AJAX, ya que cualquier cosa que haga AJAX puede ser omitida por el cliente.