Nel mondo del Web 2.0 esiste un formato alternativo rispetto all’ XML per scambiare dati fra client e server. Sto parlando di JSON (JavaScript Object Notation) che ad oggi è molto utilizzato nelle interazioni Ajax.
Le strutture utilizzate da JSON sono:
- oggetti, inteso come coppie non ordinate di nome – valore, ove il nome è un a stringa ed il valore un qualsiasi oggetto javascript
- liste ordinate di valori
Ecco un esempio di oggetto JSON:
var fileJson = {"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}}
il medesimo oggetto espresso in XML:
<menu value="File">
<popup>
<menuitem value="New" />
<menuitem value="Open" />
<menuitem value="Close" />
</popup>
</menu>
Esistono tre metodologie per ricevere dati Ajax con JSON:
- assegnazione , in questo caso i dati ricevuta dal server creano un oggetto JSON che dopo la funzione eval può essere sfruttato localmente:
var JSONfile = “libro = {‘titilo : Il filosofo e il lupo’}”; // questo è ciò che il server ha restituito
eval(JSONfile);
alert(libro.titolo); // restituisce Il filosofo e il lupo
- callback, in questa situazione il server chiama una funzione sul client passando come parametro un oggetto JSON:
function elabora(objJSON){
alert(objJSON.titolo); // restituisce Il filosofo e il lupo
}
var JSONfile = “elabora({‘titolo : Il filosofo e il lupo’})”;
eval(JSONfile);
- parse, è il metodo più sicuro. Infatti parseJSON sfruttando le regular expression verifica che non venga trasmesso codice nocivo. Tutte le versioni più recenti di JavaScript gestiscono questo metodo, comunque scaricabile da http://www.json.org/json.js
Attenzione particolare dal punto di vista della sicurezza deve essere posto sulla metodologia callback infatti in questo caso è possibile aggirare il metodo di controllo detto same-origin presente sui browser. Infatti anche se un browser non permette di leggere dati provenienti da un sito terzo rispetto a quello in consultazione con la metodologia callback è possibile farlo, esponendo ‘utente finale a attacchi di tipo XSS o CSRF (vedi articolo http://poyblog.wordpress.com/2010/04/14/sicurezza-del-linguaggio-javascript-metodologie-di-attacco/ per maggiori dettagli).
Anche in questo caso W3c ha creato un meccanismo (attualmente in draft ed implementato in Firefox 3) per autorizzare o meno lato client le chiamate inter-dominio. Maggiori dettagli su http://www.w3.org/TR/2009/WD-cors-20090317/









