AJAX significa: "una pagina web con qualche codice in esso - e intendo proprio così". Non esiste una chiara distinzione tra AJAX e una pagina "normale", poiché le pagine normali potrebbero contenere anche elementi di script. AJAX è più un modo per affermare che intendi spingere alcune parti della tua applicazione nel browser client.
Un'applicazione basata su Web viene eseguita sull'unione del server e del client. Si è tentati di fare il client un po 'di più di una semplice visualizzazione delle pagine inviate dal server, perché:
- aumenta la reattività dell'interfaccia (l'esperienza dell'utente è migliorata);
- potrebbe ridurre il carico di rete (molte operazioni basate su GUI possono essere eseguite sul client senza parlare al server);
- potrebbe ridurre il carico di elaborazione (più lavoro per la macchina client, meno lavoro per il server).
Un'analogia può essere fatta con i giochi online, ad es. con giochi FPS. Diversi utenti si sparano l'un l'altro. Il server tiene traccia di dove sono tutti e chi uccide chi. Per tali giochi, la reattività dell'interfaccia è di fondamentale importanza; di conseguenza, è completamente inimmaginabile che il server calcoli tutto e invii solo frame da mostrare al client. Invece, i client devono eseguire il pesante lavoro di rendering 3D e il server invia semplicemente mappe di livello e aggiornamenti della posizione dei giocatori.
A quel punto, entra in gioco la sicurezza, a causa della regola fondamentale:
- Dal punto di vista del server, il cliente è un cattivo.
Nell'analogia del gioco, ciò significa che il server deve fidarsi del codice client: per il rendering 3D, il cliente deve conoscere la mappa del livello e la posizione di tutti gli altri giocatori. Sarebbe facile, per un cliente modificato, mostrare la mappa al giocatore e individuare gli altri giocatori. In realtà, ci sono molti imbroglioni là fuori, ei motori di gioco usano sofisticate tecniche di offuscamento del codice per cercare di scoraggiare la maggior parte degli imbroglioni (perché i cheaters uccidono il divertimento, e senza il divertimento i giocatori se ne vanno).
Questo illustra il problema della sicurezza AJAX: poiché è un codice che viene eseguito sul lato client, qualunque cosa faccia non può essere considerata attendibile dal server, anche se l'utente è debitamente autenticato (sapendo chi fa non lo rende automaticamente legittimo). Questo di solito non è un problema per le interazioni relative alla GUI, a meno che non ci siano problemi di sicurezza sulla GUI, come la funzione "visualizzazione della mappa di livello" nell'analogia di gioco. Il modo corretto di analizzare la sicurezza delle applicazioni basate sul Web è di supporre che ogni singolo byte emesso dal server sia noto al client e che ogni byte del client sia potenzialmente dannoso.
Come esempio approssimativo, considera l'iniezione SQL. Un modo per evitare attacchi SQL injection è assicurarsi che l'elemento dati che si collega alla richiesta non abbia caratteri speciali senza caratteri di escape. Questo passaggio di convalida DEVE essere eseguito sul server. Non puoi farlo in modo sicuro in AJAX, poiché qualsiasi cosa faccia AJAX può essere aggirata dal client.