Javascript assainissement: Le plus sûr moyen d'insérer possible XSS chaîne html
Actuellement, je suis en utilisant cette méthode avec jQuery solution, pour nettoyer la chaîne d'éventuelles attaques XSS.
sanitize:function(str) {
//return htmlentities(str,'ENT_QUOTES');
return $('<div></div>').text(str).html().replace(/"/gi,'"').replace(/'/gi,''');
}
Mais j'ai le sentiment que ce n'est pas assez sûr. Dois-je raté quelque chose?
J'ai essayé htmlentities de phpjs projet ici:
http://phpjs.org/functions/htmlentities:425/
Mais il est un peu buggé et retourne quelques autres symboles spéciaux. C'est peut-être une ancienne version?
Par exemple:
htmlentities('test"','ENT_QUOTES');
Produit:
test&quot;
Mais devrait être:
test"
Comment gérez-vous cette via javascript?
Comment avez-vous l'intention d'utiliser le "aseptisé" chaîne de caractères?
Insérez dans le document html à la bce en tant que texte. Comme href="aseptisé" ou src="aseptisé", ou <div>aseptisé</div>
D'où l'insert est déclenchée? Voulez-vous insérer la chaîne dans un déjà ouvert la page dynamiquement à l'aide de Javascript, ou dans le générés par le serveur document HTML à l'aide de PHP?
Oui dynamiquement à l'aide de javascript. La chaîne vient de la source non fiable.
L'utilisation de la Caja html_sanitize.js. stackoverflow.com/questions/12253686/...
Insérez dans le document html à la bce en tant que texte. Comme href="aseptisé" ou src="aseptisé", ou <div>aseptisé</div>
D'où l'insert est déclenchée? Voulez-vous insérer la chaîne dans un déjà ouvert la page dynamiquement à l'aide de Javascript, ou dans le générés par le serveur document HTML à l'aide de PHP?
Oui dynamiquement à l'aide de javascript. La chaîne vient de la source non fiable.
L'utilisation de la Caja html_sanitize.js. stackoverflow.com/questions/12253686/...
OriginalL'auteur Somebody | 2012-07-02
Vous devez vous connecter pour publier un commentaire.
Si votre chaîne est censé être en texte brut sans mise en forme HTML, il suffit d'utiliser
.createTextNode(text)
/affectation à.data
propriété d'un texte existant nœud. Tout ce que vous y mettrez toujours être interprétée comme du texte et n'a plus besoin de s'échapper.J'ai écrit "quel que soit" et c'est "quelque chose", en effet. Vous seriez la manipulation de champ dans les DOM structure qui peut contenir que du texte. Ces opérations ne sont jamais la cause de tout automagical invocations de l'analyseur HTML comme le célèbre
innerHTML
serait de le faire (ce qui, d'ailleurs, est toujours considéré comme l'un des pires défauts de conception de cette fonctionnalité).OriginalL'auteur Oleg V. Volkov
Alors vous n'avez pas besoin de désinfecter manuellement. Avec jQuery, vous pouvez simplement écrire
Navigateur va séparer les données à partir du code pour vous.
Exemple: http://jsfiddle.net/HNQvd/
alt
est sûr, vous avez toujours des problèmes avec les attributs qui peuvent être interprétées comme non-texte en bas de la ligne. Le plus évidentonclick
et d'autres gestionnaires, mais aussisrc
.Tout ce qui pourrait être considéré comme nocif. Si l'OP est en passe de changer arbitraire des attributs (avec l'utilisateur fourni les noms), puis ils ont des problème beaucoup plus important que juste désinfecter les valeurs.
Personnes. J'ai une solution qui fonctionne dans mon post. Je veux juste que vous les gens, à la mise à jour si il a quelques vulnérabilités si utilisé à l'intérieur <div>ICI</div> ou <a href="ICI"></a> ou <img src="ICI"/>. C'est tout. 🙂
Encore une fois, vous ne devriez pas ré-inventer le vélo (qui peuvent avoir des vulnérabilités); vous devriez plutôt utiliser un bien soutenu solution standard qui sépare les données et le code. Par exemple, au lieu de tenter de désinfecter la chaîne, puis de la rédaction de votre tri de la aseptisé résultat dans la
innerHtml
, vous devriez plutôt laisser la chaîne source-est et l'écrire dans leinnerText
.OriginalL'auteur penartur
Vous devez citer d'autres personnages:
'
"
<
>
(
)
;
Ils peuvent tous être utilisés pour XSS attacsk.
OriginalL'auteur some_coder