Cross-site XMLHttpRequest
martedì 7 ottobre 2008 Pubblicato in Tecnologia, sicurezza, standard, web | Nessun commento »Il W3C ha pubblicato il working draft della versione 2.0 di XMLHttpRequest (la libreria che permette ad Ajax di esistere). Tra le novità di rilievo della nuova versione, la possibilità di eseguire cross-site request, aprendo la possibilità di utilizzare web service e syndication da siti terzi:
11. The previous level of this specification raised a
SECURITY_ERRat this place in case of a non same origin stored url. This specification supports non same origin requests and therefore this exception is no longer raised here.
[XMLHttpRequest Level 2 -W3C Working Draft 30 September 2008]
Oggi questa possibilità è negata per motivi di sicurezza. Per visualizzare, per esempio, un feed rss di un sito “terzo” devo effettuare la syndication del contenuto sul server. Devo predisporre uno script server side che processi il feed e generi il codice HTML che il server principale può quindi trasmettere al client.. Il browser dell’utente non mi autorizza a compiere questa operazione direttamente sulla pagina via javascript. XMLHttpRequest, ad oggi, non può comunicare con server diversi da quello che ha trasmesso il documento che desidera effettuare la richiesta. La libreria è nata così e il W3C ne ha acquisito le specifiche nel proprio standard.
La motivazione della sicurezza potrebbe essere accettabile se non fosse permessa la più “audace” esecuzione di generico codice javascript trasmesso da un sito terzo. Da sempre posso, cioè, caricare sulla pagina script provenienti da server terzi, con conseguenti rischi sulla sicurezza (cross site scripting vulnerabilities) e la privacy. Oggi non possiamo scaricare dati da server terzi all’interno della libreria XMLHttpRequest, ma possiamo eseguire codice javascript arbitrario. Una limitazione decisamente poco sensata.
Ed è decisamente tardi per tornare indietro e limitare l’esecuzione di scripting da siti terzi. E’ grazie ad esso che possiamo inserire con estrema semplicità la pubblicità sulle nostre pagine e possiamo, per esempio, monitorare il clickstream sul nostro sito tramite servizi come google analytics o crazyegg. Insomma, non siamo più disposti a rinunciare allo scripting remoto e quindi la direzione evolutiva è scontata: ben venga, al più presto un consolidamento dello standard W3C (oggi è ancora nello stato di working draft, una bozza) e, soprattutto, la sua implementazione nei browser.
Per inciso, firefox 3, durante la fase finale del processo di beta-testing, aveva rilasciato una versione con cross-site XMLHttpRequest, subito ritirata. Peccato. Forse la sua diffusione ne avrebbe tratto vantaggi.