2009-11-04 5 views
0

Je suis un peu confus sur quelque chose, voir Je fais une requête Ajax via Jquery, je renvoie des données encodées dans un document XML (en utilisant htmlentities pour empêcher XSS) mais la chose est quand je pars le XML et obtenir les données, il semble que Jquery décode automatiquement les htmlentities et je me retrouve avec des données vulnérables. Avez-vous une idée de la façon d'empêcher Jquery de décoder les données codées, ou il me manque une option dans la requête ajax?Jquery Ajax XML répondre problème

Toute aide est très appréciée car je suis bloqué à ce stade.

voici mes options actuelles ajax:

$.ajax({ 
    url: 'ajax_handle.php', 
    data: {pg: cpage, rid: rid}, 
    type: 'POST', 
    cache: false, 
    error: function(xhr, ajaxOptions, thrownError){ 
    $(button).val('Error'); 
    }, 
    success: function(xmldata){ /* Parsing here */ } 
} 

D'une certaine façon Lorsque j'utilise Jquery find() et obtenir le texte, toutes les données qui a été codé avec htmlentities obtient décodé.

Exemple:

Data : <c><cu>Test</cu><cb>&#160;htmlentitiesgez564&lt;script&gt;</cb></c> 

données analysables:

cu : Test 
cb : htmlentitiesgez564<script>; 

Vous pouvez voir comment cela peut être dangereux, toute idée comment résoudre ce problème?

+0

S'il vous plaît modifier votre question: le code source Indenter avec 4 espaces pour avoir l'air bien. – Boldewyn

+0

Merci, premier temporisateur ici: ') –

+0

Vous voulez dire que les xmldata que vous obtenez dans la fonction de succès ont déjà les entités décodées? Avez-vous essayé de définir explicitement dataType sur xml dans la requête ajax? – jitter

Répondre

0

jQuery décode automatiquement les données, mais aussi longtemps que vous ne pas eval ou injecter ces données dans le DOM rien ne se passera. Ainsi, par exemple si vous voulez injecter dans les DOM vous ne devez pas utiliser la méthode html mais la méthode text:

$('#someDiv').text('<script>alert("ok");</' + 'script>'); 
+0

Merci! J'aime beaucoup K.I.S.S –

+0

J'ai aussi compris que mettre vos données dans

0

essayer d'ajouter l'option dataType à votre objet config ajax

$.ajax({ 
    url: 'ajax_handle.php', 
    data: {pg: cpage, rid: rid}, 
    type: 'POST', 
    dataType: "text", 
    cache: false, 
    error: function(xhr, ajaxOptions, thrownError){ 
    $(button).val('Error'); 
    }, 
    success: function(xmldata){ /* Parsing here */ } 
} 

Cela devrait dire jQuery que la réponse reçue doit être interprété comme du texte

+0

C'est vrai, mais je ne serai pas capable de l'analyser, puisque la réponse est des données XML. –