Opzetten van JSON request met jQuery
Momenteel ben ik het CodeIgniter framework aan het voorzien van een soort van abstracte Ajax-laag die met behulp van jQuery JSONrequests zal plaatsen en de response zal verwerken. Nu is het zo, dat in mijn JSONresponse diverse parameters zullen voorkomen:
- Messages, gerenderd in een HTML table
- uit te voeren javascript
- HTML output van de response, wordt gebruikt voor HTML die ergens op de pagina moet worden geplaatst
- Overige dingen die handig blijken
Mijn vraag is nu eigenlijk: Brengt het risico's met zich mee als de HTML niet geëscaped (met uitzondering van de \ die voor alle speciale tekens wordt geplaatst door json_encode) in de response wordt meegestuurd? En kan ik de meegestuurde Javascript het beste met jQuery.globalEval() evalueren of hebben jullie betere suggesties?
Alle tips zijn welkom!
Als de data die jij ophaalt gegenereerd wordt door jou, is het escapen niet een must. Als je toegang tot dat script alleen aan jezelf overlaat, zou ik me er niet zo druk over maken.
Als de JSON requests echter beinvloedbaar zijn door ( kwaadwillige ) gebruikers zul je inderdaad alles moeten escapen.
Om gegenereerde javascript alsnog uit te voeren, kun je wellicht het beste nog de .bind() methode / .live() methodes draaien in jquery.
Dat betekent alleen wel dat je er voor moet zorgen dat alle gegenereerde js veilig is.
Wat bedoel je precies?
Ga je echt in de respons extra code zetten?
Je kan uiteraard op basis van gegevens in de respons bepaalde (bestaande) code laten uitvoeren, maar om die code zelf ook in de respons te zetten ... Het kan, maar is dat nodig?
Ik zou wel eens een stukje code willen zien. Zien waar je naar toe wil.
Ik ben geneigd te denken dat er niet zo vreselijk veel is dat kan fout lopen, maar dit toch met grote voorzichtigheid; misschien ben je dingen van plan waar ik momenteel niet aan denk.
Merk op, jQuery doet al veel voor je.
Met zo'n soort request:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
$.ajax({
type: "POST",
url: url,
dataType: "json",
data: "...",
success: my_callback
});
type: "POST",
url: url,
dataType: "json",
data: "...",
success: my_callback
});
krijg je pas een success als de data echt JSON is. Toch al 1 zorg minder.