11499 sujets

JavaScript, DOM et API Web HTML5

Bonjour,

Je viens de réaliser qu'il n'y a pas de catégorie Sécurité dans le forum. Bref :

Je n'y connais quasiment rien en sécurité, du moins au regard de mes collègues, pas du simple quidam tout de même, et je me posais la question suivante :

Un remplacement de code via jquery en passant par 2 scripts js inclus proprement sous wordpress
et utilisant la syntaxe suivante :
$this.html(content.replace(
Est-ce dangereux question sécurité ?
Je m'en sers en fait pour détecter chiffres et astérisques et les encadrer de span afin de leur donner des spécifications css.

Merci ^^
Modifié par Manhattan (16 Feb 2016 - 14:19)
Bonjour,

Je ne vois rien de bien dangereux là-dedans...

Je ne m'y connais probablement guère plus que toi, mais je pense que le javascript ne doit pas être bien dangereux tant qu'il ne va pas causer avec un langage serveur (e.g. éléments de formulaire, ou Ajax+PHP...)

À confirmer par d'autres...
Oui, c'est ce que je me disais, mes span n'existent pas sur le serveur. Mais je me posais quand même la question...
Modérateur
Bonjour,

Le problème est plutôt quand l'utilisateur a des possibilités d'actions. ce n'est pas vraiment lié au fait qu'il y ait des échanges avec le serveur de prévu ou pas. Par exemple quand :

1) un utilisateur peut remplir un formulaire
2) un utilisateur peut passer des données après le ? dans une url
3) un utilisateur peut uploader des fichiers
4) un utilisateur peut exécuter des scripts présents sur ton serveur destinés à ta cuisine interne
5) etc.

Rien de tout ça n'est dangereux si c'est correctement codé.

Mais même si tu n'as mis toi-même aucune communication en place avec le serveur, si tu as par exemple un formulaire, et si tu recopies dans la page ce que l'utilisateur a pu saisir dans le formulaire plus ou moins tel quel (ce que peut potentiellement faire justement un $this.html(content.replace(...)), alors un utilisateur malveillant peut dans le formulaire entrer du code javascript qui peut faire de l'AJAX ou n'importe quoi d'autre, code qui sera éventuellement exécuté quand tu feras ton remplacement de contenu.

Il faut donc t'assurer que quand tu recopies quelque chose dans ta page, ce quelque chose ne puisse pas contenir du code javascript entré par un utilisateur lambda par quelque moyen que ce soit.

EDIT : un bon moyen de faire cela est de remplacer avant recopie tous les <, >, &, ', ", par leur équivalent html (&lt;, &gt;, ...).
EDIT : il est possible que quand on passe via des outils du genre jquery ou autre, les fonctions de ces outils fassent déjà le job. Mais il faut s'en assurer au cas par cas.

Amicalement,
Modifié par parsimonhi (16 Feb 2016 - 13:42)
Merci parsimonhi mais je ne suis pas tout à fait sur de comprendre :
je protège toujours mes formulaires avec les fonctions php adéquates afin de désactiver toute balise ou autre.
Je n'ai donc pas besoin de protéger ma ligne js de remplacement, si ?


var rxp = new RegExp("([0-9\*]+)", "gm");
$this.html(content.replace(rxp, "<span class='exgTxt'>$1</span>"));

Modifié par Manhattan (16 Feb 2016 - 13:40)
Modérateur
Manhattan a écrit :
Merci parsimonhi mais je ne suis pas tout à fait sur de comprendre :
je protège toujours mes formulaires avec les fonctions php adéquates afin de désactiver toute balise ou autre.
Je n'ai donc pas besoin de protéger ma ligne js de remplacement, si ?


var rxp = new RegExp("([0-9\*]+)", "gm");
$this.html(content.replace(rxp, "&lt;span class='exgTxt'&gt;$1&lt;/span&gt;"));


OK, si tu ne gardes que des nombres et les *, là, tu ne risques rien.

Amicalement,
Modérateur
Bonjour,

Oui, oui, désolé de t'avoir inquiété, j'avais un peu trop vite lu ta regex.

Amicalement,