Ajax è davvero una bella tecnologia. La capacità di riportare le interazioni fra web server e l'interfaccia in modalità asincrona conferisce più fluidità di utilizzo e una migliore, come si dice, "user experience". Ma, nel campo delle applicazioni software, aggiungendo complessità spesso si aggiunge anche minor controllo.
Un tale Samy, qualche giorno fa, ha "bucato" Myspace.com, una delle più grandi comunità di relazioni sul Web, utilizzando le potenzialità di Ajax. Il giovane, che ha 19 anni e si definisce un "playboy/software developer", ha semplicemente aggiunto al proprio profilo del codice JavaScript che non solo, anche grazie alla complicità del browser, ha eluso i diversi controlli dell'applicazione Web, ma è riuscito a rendersi praticamente invisibile all'esecuzione utilizzando l'oggetto XMLHTTPRequest.
Ogni utente che visualizzava il profilo di Samy aggiungeva, automaticamente, lo stesso Samy al suo elenco di amici. Se nel profilo dell'utente "aggredito" era previsto anche l'elenco di "heroes", Samy si aggiungeva anche a quello con la frase "but most of all, samy is my hero". Non finisce qui: il codice venica incluso nel profilo dell'utente aggredito, propagandosi esponenzialmente. In meno di 24 ore Samy aveva oltre un milione di nuovi amici ed un nuovo business.
L'aggiunta e la modifica del profilo solitamente richiedono l'intervento dell'utente. Per rendere i vari GET e POST silenziosi, il nostro Samy ha utilizzato un tipico oggetto Ajax (XMLHTTPRequest) che, lavorando in sottofondo, eseguiva tutte le procedure all'insaputa del navigatore.
Sfruttare una simile vulnerabilità non in remote scripting, ma con i normali linguaggi lato server asincroni (sì, i vecchi Click-and-Wait), sarebbe stato più complesso e più visibile, ma ugualmente fattibile. Tuttavia il principio generale di minor controllo dell'utente sui dati inviati, proprio di Ajax, vale in generale ed è ben descritto da un articolo su Devx.com:
Oggi, la profilazione serve ai gestori di siti per individuare tendenze, visualizzare le abitudini di navigazione o problemi di usabilità . Fino ad oggi gli sviluppatori potevano solo analizzare dati ("posted data") che gli utenti decidono di inviare. [...] Con Ajax le azioni degli utenti possono essere costantemente monitorate. Tutto cià che può essere fatto, viene effettivamente fatto [...]. Pensate, per esempio, se un giorno il vostro iPod cade e smette di funzionare. Sperando nella sostituzione in garanzia, scrivete una mail al supporto Apple che recita: "Ho comprato da poco un iPod. L'ho fatto cadere per le scale. Ora ha smesso di funzionare". Per evitare problemi, potete decidere di cancellare il secondo periodo. TROPPO TARDI! Se il sito utilizza Ajax, la tua richiesta potrebbe essere già stata inviata.