Injection de balises HTML dans asp.net

Mon équipe de sécurité a signalé un problème de sécurité lié à l’injection de balises html pour le code ci-dessous.

function ClosePopUp(objBhID) { var pageName = window.location.pathname; var modalPopupBehavior = $find(objBhID); if (modalPopupBehavior != null && modalPopupBehavior != 'undefined') { modalPopupBehavior.hide(); } if (objBhID == 'bhThankMsg' && pageName == '/Projects/Comm.aspx') { var objPartnerID = ''; if (objPartnerID != 'undefined' && objPartnerID != null && objPartnerID != '') { window.location = '/Projects/Comm.aspx?Id=&partnerid='; } else { window.location = '/Projects/Comm.aspx?Id='; } } } 

Mon équipe de sécurité a signalé le problème ci-dessous. entrez la description de l'image ici

Des vulnérabilités d’injection de balises HTML ont été identifiées sur cette application Web. Les injections de balises HTML sont utilisées pour faciliter la falsification de requêtes intersites et les attaques de phishing contre des sites Web tiers. Elles peuvent souvent être qualifiées de vulnérabilités de scripts intersites. Les recommandations incluent la mise en œuvre de techniques de programmation sécurisées garantissant une filtration appropriée des données fournies par l’utilisateur, ainsi que l’encodage de toutes les données fournies par l’utilisateur afin d’empêcher que les scripts insérés soient envoyés aux utilisateurs finaux dans un format pouvant être exécuté.

Mon exigence est que je ne veux pas permettre à un utilisateur ou à un pirate informatique d’injecter des données inutiles, comment y parvenir?

Bien que l’autre réponse fonctionne dans ce cas pour les URL, car l’encodage d’URL intégré codant pour des caractères html et des caractères d’échappement Javascript, ce n’est pas une solution complète pour utiliser des valeurs dynamics côté serveur dans Javascript. Par conséquent, je publie ma réponse ici, donc j’espère que personne ne tombera dans le piège d’utiliser un mauvais codage et qu’il produira quelque chose d’insécurisé.

La règle OWASP est la suivante :

À l’exception des caractères alphanumériques, échappez tous les caractères inférieurs à 256 avec le format \ xHH pour empêcher le basculement de la valeur de données dans le contexte du script ou dans un autre atsortingbut. N’UTILISEZ aucun raccourci d’échappement comme \ “car le caractère de citation peut être comparé à l’parsingur d’atsortingbut HTML qui s’exécute en premier. Ces raccourcis d’échappement sont également susceptibles d’attaques” escape-the-escape “où l’attaquant envoie \” et le code vulnérable. transforme cela en \ “qui active la citation.

Cependant, une solution plus simple et plus simple consiste à ne jamais placer de données côté serveur dans aucune balise de script ou atsortingbut activé de script. Utilisez les atsortingbuts de données HTML5, vous pouvez alors insérer vos données HTML codées dans un contexte HTML plus sûr.

Je vois que vous semblez utiliser JQuery. Pourquoi ne pas procéder comme suit, vous pouvez alors utiliser les fonctions de codage ASP.NET intégrées?

 
" data-id="<%=Server.HTMLEncode(Request.QueryString["id"]%>)" />

Ou simplement

 
" data-id="<%:Request.QueryString["id"]%>" />

sur les nouvelles versions de .NET.

Votre code devient alors:

 function ClosePopUp(objBhID) { var pageName = window.location.pathname; var modalPopupBehavior = $find(objBhID); if (modalPopupBehavior != null && modalPopupBehavior != 'undefined') { modalPopupBehavior.hide(); } if (objBhID == 'bhThankMsg' && pageName == '/Projects/Comm.aspx') { var objPartnerID = $('#myDynamicData').data('partnerId'); var id = $('#myDynamicData').data('id'); if (objPartnerID) { window.location = '/Projects/Comm.aspx?Id=' + encodeURIComponent(id) + '&partnerid=' + encodeURIComponent(objPartnerID); } else { window.location = '/Projects/Comm.aspx?Id=' + encodeURIComponent(id); } } } 
 <%= HttpUtility.UrlEncode( Request.QueryString["ID"] ) %>