63 votes

La méthode jQuery .text () XSS est-elle sûre?

J'ai des données non échappées des utilisateurs.

Donc, est-il sécuritaire d'utiliser comme ceci:

 var data = '<test>a&f"#</test>'; // example data from ajax response
if (typeof(data) === 'string')
    $('body').text(data);
 

Puis-je utiliser comme ceci ou il y a quelques problèmes comme l'encodage ou des symboles spécifiques que je devrais faire attention et ajouter une validation plus stricte?

57voto

James Allardice Points 81162

Lorsque vous définissez le texte d'un élément à l'aide de l' text méthode, jQuery utilise createTextNode en interne, qui échappe à tous les caractères spéciaux.

À partir du jQuery docs:

Nous devons être conscients que cette méthode s'échappe de la chaîne fournie en tant que nécessaire pour qu'ils s'affichent correctement dans le code HTML. Pour ce faire, il appelle la méthode DOM .createTextNode(), qui remplace les caractères spéciaux avec leurs équivalents en entité HTML (comme &lt; pour <)

Donc, oui, il devrait être à l'abri. Voici votre exemple, jsfiddle. Remarquez comment les balises apparaissent comme texte littéral.

14voto

Matt Points 38395

Parce que les attaques XSS compter sur d'être capable d'insérer des nœuds DOM (<img />, <script />), etc, et jQuery.fn.text() ne prend pas en charge cette fonction, il est tout à fait XSS coffre-fort.

Comme vous pouvez le voir dans cet exemple de base, tous-les balises HTML sont codés en tant que résultat de jQuery en utilisant createTextNode en interne:

jQuery('div').text('<test>a&f"#</test>');​

De sorte que ce qui est en fait insérée est plus équivalent à;

jQuery('div').html('&lt;test&gt;a&f"#&lt;/test&gt;');​

8voto

winSharp93 Points 7124

Vous devez toujours faire attention lorsque vous insérez le résultat dans le DOM - voir: Vulnérabilité Cross-Site Scripting avec JavaScript et JQuery .

Cependant, pour définir le texte des éléments, le texte doit être compatible XSS.

0voto

EvilP Points 5113

Contrairement à la méthode .html (), .text () peut être utilisé à la fois dans les documents XML et HTML. Le résultat de la méthode .text () est une chaîne contenant le texte combiné de tous les éléments correspondants. (En raison des variations des analyseurs HTML dans les différents navigateurs, le texte renvoyé peut varier en nouvelles lignes et en d'autres espaces.)

.text(data) supprimerait les <test></test> et vous laisserait avec a&f#

-1voto

Quentin Points 325526

Oui. Il s’agit de texte, pas de code.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X