国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Maison interface Web js tutoriel Votre texte enrichi pourrait être une vulnérabilité de script intersite

Votre texte enrichi pourrait être une vulnérabilité de script intersite

Dec 30, 2024 pm 07:15 PM

Reconna?tre et atténuer les vulnérabilités SXSS avant qu'elles ne soient exploitées

Par Luke Harrison

Cet article a été initialement publié sur IBM Developer.

De nombreuses applications actuelles doivent afficher du texte enrichi en HTML sur leurs sites Web. Afin de générer ce texte formaté à partir de la saisie de l'utilisateur, les développeurs utilisent un composant d'éditeur de texte enrichi. Le problème ? Cette fonctionnalité peut indirectement ouvrir votre application et vos données à une vulnérabilité connue sous le nom de scripts intersites stockés (SXSS).

Dans cet article, vous découvrirez ce qu'est une vulnérabilité SXSS et passerez en revue quelques ? odeurs de code ? que vous pouvez utiliser pour vérifier si vos applications sont affectées. Vous verrez également un exemple d'application vulnérable et découvrirez une stratégie de correction pour cette vulnérabilité.

Qu’est-ce que le cross-site scripting stocké??

Les scripts intersites stockés sont un type de vulnérabilité que les attaquants peuvent exploiter pour injecter du code malveillant dans une base de données. Ce code s'exécute ensuite sur le navigateur de la victime après avoir été récupéré et restitué par un framework frontal.

Cette vulnérabilité est extrêmement dangereuse car elle peut permettre aux attaquants de voler des cookies, de déclencher des redirections ou d'exécuter un assortiment de scripts dangereux dans le navigateur de la victime. La propagation de l'exploit nécessite très peu de travail de la part de l'attaquant : la victime n'a pas besoin de cliquer sur un lien malveillant ou de se laisser prendre à un stratagème de phishing, elle utilise simplement un site de confiance affecté par SXSS. Consultez les liens en bas de la page pour plus de détails sur les vulnérabilités de script intersite.

Odeur de code?: innerHTML et dangereusementSetInnerHTML

Une odeur de code est simplement une caractéristique du code qui indique un problème plus profond. Les navigateurs n'exécutent normalement pas automatiquement les scripts injectés, mais si un développeur utilise des API de navigateur ou des propriétés d'éléments potentiellement dangereuses, cela peut conduire à une situation dans laquelle les scripts do s'exécutent.

Jetez un ?il à l'extrait de code suivant?:

const someHTML = “<h1>Hello world</h1>“

const output = document.getElementById("rich-text-output");

output.innerHTML = someHTML

Dans cet exemple, nous stockons du HTML dans une variable, récupérons un élément du DOM et définissons la propriété innerHTML de cet élément sur le contenu stocké dans la variable. La propriété innerHTML peut être utilisée pour restituer du HTML à partir d'une cha?ne à l'intérieur d'un autre élément HTML.

Ce qui est dangereux avec cette propriété, c'est qu'elle restituera tout code HTML ou JavaScript que vous lui transmettrez. Cela signifie que si quelqu'un était en mesure de contr?ler les données transmises à la propriété, il pourrait techniquement exécuter n'importe quel JavaScript dans le navigateur d'un utilisateur.

Un autre moyen populaire mais dangereux de restituer du HTML dynamique dans un navigateur consiste à utiliser la propriété du composant React DangerlySetInnerHTML. Cette propriété se comporte exactement de la même manière que la propriété innerHTML dans Vanilla JavaScript et HTML.

L'exemple suivant appara?t dans la documentation React?:

const someHTML = “<h1>Hello world</h1>“

const output = document.getElementById("rich-text-output");

output.innerHTML = someHTML

Si vous utilisez actuellement l'une de ces propriétés dans une application Web frontale, il y a de fortes chances que vous ayez un certain type de vulnérabilité de script intersite. Nous verrons comment ces propriétés peuvent être exploitées et quelques mesures que vous pouvez prendre pour résoudre ces problèmes plus loin dans cet article.

Odeur de code?: éditeurs de texte enrichi

Un autre signe indiquant que votre application pourrait être vulnérable à SXSS est simplement le fait que vous utilisez ou non un éditeur de texte enrichi, tel que TinyMCE ou CKEditor.

Your rich text could be a cross-site scripting vulnerability

Your rich text could be a cross-site scripting vulnerability

La plupart des éditeurs de texte enrichi fonctionnent en convertissant le texte formaté généré par un utilisateur en HTML. Comme mesure de sécurité supplémentaire, bon nombre de ces éditeurs utilisent une forme de nettoyage pour supprimer le JavaScript potentiellement malveillant de leurs entrées. Cependant, si vous n'appliquez pas ces mêmes techniques de nettoyage sur les services qui re?oivent et stockent le contenu en texte enrichi, vous rendez probablement vos applications vulnérables à SXSS.

Même si vous ne restituez pas le contenu sur vos propres sites, il y a de fortes chances que ces données soient consommées par des applications qui effectuent le rendu. Pour concevoir des applications sécurisées, il est extrêmement important de prendre en compte les consommateurs actuels et futurs de vos données. Si vos données sont affectées par SXSS, toutes les applications qui consomment vos données le sont également.

Exemple d'application avec vulnérabilité SXSS

Jetons un coup d'?il à un petit exemple d'application Web présentant une vulnérabilité SXSS, puis tentons de l'exploiter.

Pour exécuter cette application, clonez d'abord ce dép?t d'application de démonstration et suivez les instructions ? Exécuter l'application ? dans le fichier readme.md.

Après avoir exécuté l'application et accédé à http://localhost:3000/unsanitized.html, vous devriez voir une page qui ressemble à ceci?:

Your rich text could be a cross-site scripting vulnerability

Cette application prend simplement du texte enrichi d'un utilisateur, le stocke sur un serveur Web, puis le restitue dans la section intitulée Sortie.

Avant d'exploiter la vulnérabilité SXSS, prenez un moment pour jeter un ?il à l'application. Reportez-vous aux odeurs de code mentionnées ci-dessus et parcourez le code pour voir si vous pouvez repérer les sections problématiques. Essayez d'ouvrir l'onglet Réseau dans votre navigateur et voyez les requêtes qu'il envoie lorsque vous saisissez et soumettez du texte enrichi.

Dans le fichier unsanitzed.html, vous verrez la fonction suivante, nommée renderPostByID?:

const someHTML = “<h1>Hello world</h1>“

const output = document.getElementById("rich-text-output");

output.innerHTML = someHTML

Regardez attentivement cette fonction. Vous remarquerez que nous utilisons la propriété innerHTML mentionnée ci-dessus pour restituer du texte enrichi que nous avons récupéré de l'API sous forme HTML.

Maintenant que nous voyons la partie vulnérable du code, exploitons-la. Nous allons contourner l'entrée de l'éditeur de texte enrichi et accéder au point de terminaison de l'API qui enregistre les publications directement sur le serveur Web. Pour ce faire, vous pouvez utiliser la commande cURL suivante?:

function createMarkup() {

  return {__html: 'First &middot; Second'};

}

function MyComponent() {

  return <div dangerouslySetInnerHTML={createMarkup()} />;

}

Remarquez la charge utile de données que nous envoyons dans la demande. Il s'agit d'un code HTML malveillant qui inclut une balise d'image avec une propriété onerror définie sur du JavaScript qui affiche une bo?te de dialogue d'alerte. Les attaquants utiliseront des astuces comme celle-ci pour éviter les méthodes de nettoyage mal mises en ?uvre visant à supprimer le JavaScript des éléments HTML avant qu'ils ne soient stockés dans une base de données.

Après avoir exécuté le script ci-dessus, vous devriez recevoir un identifiant de publication comme le suivant?:

const renderPostByID = async (id) => {
    // setting url seach params
    let newURL = window.location.protocol + "//" + window.location.host + window.location.pathname + `?post=${id}`;
    window.history.pushState({ path: newURL }, "", newURL);

    // getting rich text by post id
    let response = await fetch(`/unsanitized/${id}`, { method: "GET" });
    let responseJSON = await response.json();
    console.log(responseJSON);

    // rendering rich text
    output.innerHTML = responseJSON.richText;
};

Collez cet ID de publication dans le paramètre de requête d'URL de publication et appuyez sur Entrée.

Your rich text could be a cross-site scripting vulnerability

Lorsque vous faites cela, vous devriez voir une bo?te de dialogue d'alerte sur votre écran confirmant que le site est effectivement vulnérable à SXSS.

Your rich text could be a cross-site scripting vulnerability

Comment empêcher SXSS

Maintenant que nous avons vu comment exploiter une vulnérabilité SXSS, voyons comment nous pouvons corriger une vulnérabilité. Pour ce faire, vous devrez nettoyer le texte enrichi HTML à trois endroits différents?:

  1. C?té serveur, avant que le contenu ne soit stocké dans votre base de données.
  2. C?té serveur, lorsque le contenu est récupéré de votre base de données.
  3. C?té client, lorsque le contenu est restitué par le navigateur.

Il peut être clair pourquoi vous souhaitez nettoyer le contenu avant de le stocker dans la base de données et lors de son rendu c?té client, mais pourquoi le nettoyer lors de sa récupération?? Eh bien, imaginons que quelqu'un obtienne les privilèges nécessaires pour insérer du contenu directement dans votre base de données. Ils pouvaient désormais insérer directement du code HTML malveillant, contournant complètement le désinfectant initial. Si un consommateur de l’une de vos API n’implémente pas également cette désinfection c?té client, il pourrait être victime de l’exploit de script intersite.

Gardez toutefois à l'esprit que l'ajout d'une désinfection aux trois emplacements pourrait entra?ner une dégradation des performances. Vous devrez donc décider vous-même si vous avez besoin de ce niveau de sécurité. à tout le moins, vous devez nettoyer toutes les données c?té client avant de restituer du contenu HTML dynamique.

Voyons comment nous implémentons la désinfection dans la version sécurisée de notre application vulnérable. étant donné que cette application est principalement écrite en JavaScript, nous utilisons la bibliothèque dompurify pour le c?té client et la bibliothèque isomorphic-dompurify pour la désinfection c?té serveur. Dans le programme app.js qui fait office de serveur web, vous trouverez un point de terminaison express /sanitized avec une implémentation GET et POST?:

const someHTML = “<h1>Hello world</h1>“

const output = document.getElementById("rich-text-output");

output.innerHTML = someHTML

Dans l'implémentation POST, nous récupérons d'abord le texte riche du corps de la requête, puis appelons la méthode sanitize de la bibliothèque isomorphic-dompurify avant de le stocker dans notre objet de données. De même, dans l'implémentation GET, nous appelons la même méthode sur le texte enrichi après l'avoir récupéré de notre objet de données et avant de l'envoyer à notre consommateur.

C?té client, nous utilisons à nouveau cette même méthode avant de définir la propriété innerHTML de notre div de sortie dans sanitized.html.

function createMarkup() {

  return {__html: 'First &middot; Second'};

}

function MyComponent() {

  return <div dangerouslySetInnerHTML={createMarkup()} />;

}

Maintenant que vous avez vu comment nous nettoyons correctement le HTML pour empêcher les scripts intersites, revenez à l'exploit d'origine de cette application et exécutez-la à nouveau, cette fois en utilisant le point de terminaison nettoyé. Vous ne devriez plus voir la bo?te de dialogue d'alerte, car nous utilisons désormais les techniques appropriées pour empêcher la vulnérabilité SXSS.

Pour un guide SXSS complet, comprenant les meilleures pratiques et d'autres techniques de prévention du XSS, jetez un ?il à l'aide-mémoire OWASP Cross-Site Scripting.

Résumé et prochaines étapes

Dans cet article, nous avons examiné comment vous pouvez améliorer la sécurité de vos applications en empêchant les scripts intersites stockés, un type courant de vulnérabilité des applications Web. Vous devriez maintenant être en mesure de reconna?tre si vos propres applications sont vulnérables, quelles fonctionnalités vous devez examiner et comment les atténuer avant que des acteurs malveillants puissent exploiter ces vulnérabilités.

La sécurité est primordiale pour les développeurs d'entreprise. Utilisez les ressources suivantes pour continuer à vous sensibiliser aux vulnérabilités possibles et aux moyens par lesquels vous pouvez améliorer votre posture de sécurité.

  • Développeur IBM?: Hub de sécurité
  • Présentation des scripts intersites OWASP
  • Vidéo?:?Cross-Site Scripting?– Une menace qui dure depuis 25 ans et qui est toujours d'actualité

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1502
276
Comment faire une demande HTTP dans Node.js? Comment faire une demande HTTP dans Node.js? Jul 13, 2025 am 02:18 AM

Il existe trois fa?ons courantes d'initier des demandes HTTP dans Node.js: utilisez des modules intégrés, Axios et Node-Fetch. 1. Utilisez le module HTTP / HTTPS intégré sans dépendances, ce qui convient aux scénarios de base, mais nécessite un traitement manuel de la couture des données et de la surveillance des erreurs, tels que l'utilisation de https.get () pour obtenir des données ou envoyer des demandes de post via .write (); 2.AXIOS est une bibliothèque tierce basée sur la promesse. Il a une syntaxe concise et des fonctions puissantes, prend en charge l'async / attendre, la conversion JSON automatique, l'intercepteur, etc. Il est recommandé de simplifier les opérations de demande asynchrones; 3.Node-Fetch fournit un style similaire à la récupération du navigateur, basé sur la promesse et la syntaxe simple

Types de données JavaScript: référence primitive vs Types de données JavaScript: référence primitive vs Jul 13, 2025 am 02:43 AM

Les types de données JavaScript sont divisés en types primitifs et types de référence. Les types primitifs incluent la cha?ne, le nombre, le booléen, le nul, un non défini et le symbole. Les valeurs sont immuables et les copies sont copiées lors de l'attribution des valeurs, de sorte qu'elles ne se affectent pas; Les types de référence tels que les objets, les tableaux et les fonctions stockent les adresses de mémoire, et les variables pointant vers le même objet s'afferchent mutuellement. Le typeof et l'instance de OFF peuvent être utilisés pour déterminer les types, mais prêtent attention aux problèmes historiques de typeofnull. Comprendre ces deux types de différences peut aider à écrire un code plus stable et fiable.

Objet JavaScript Time, quelqu'un construit un site Web Eactexe, plus rapide sur Google Chrome, etc. Objet JavaScript Time, quelqu'un construit un site Web Eactexe, plus rapide sur Google Chrome, etc. Jul 08, 2025 pm 02:27 PM

Bonjour, développeurs JavaScript! Bienvenue dans JavaScript News de cette semaine! Cette semaine, nous nous concentrerons sur: le différend de marque d'Oracle avec Deno, les nouveaux objets Time JavaScript sont pris en charge par les navigateurs, les mises à jour Google Chrome et certains outils de développeurs puissants. Commen?ons! Le différend de marque d'Oracle avec la tentative de Deno Oracle d'enregistrer une marque "JavaScript" a provoqué la controverse. Ryan Dahl, le créateur de Node.js et Deno, a déposé une pétition pour annuler la marque, et il pense que JavaScript est un niveau ouvert et ne devrait pas être utilisé par Oracle

Gestion des promesses: cha?nage, gestion des erreurs et combinateurs de promesses en javascript Gestion des promesses: cha?nage, gestion des erreurs et combinateurs de promesses en javascript Jul 08, 2025 am 02:40 AM

La promesse est le mécanisme central pour gérer les opérations asynchrones en JavaScript. Comprendre les appels de cha?ne, la gestion des erreurs et les combinants est la clé pour ma?triser leurs applications. 1. L'appel de la cha?ne renvoie une nouvelle promesse à travers. Puis () pour réaliser la concaténation des processus asynchrones. Chaque .then () re?oit le résultat précédent et peut renvoyer une valeur ou une promesse; 2. La gestion des erreurs doit utiliser .catch () pour attraper des exceptions pour éviter les défaillances silencieuses, et peut renvoyer la valeur par défaut dans Catch pour continuer le processus; 3. Combinateurs tels que promesse.all () (réussi avec succès uniquement après tout succès), promesse.race () (le premier achèvement est retourné) et promesse.allsetTled () (en attente de toutes les achèvements)

Qu'est-ce que l'API Cache et comment est-elle utilisée avec les travailleurs du service? Qu'est-ce que l'API Cache et comment est-elle utilisée avec les travailleurs du service? Jul 08, 2025 am 02:43 AM

Cacheapi est un outil fourni par le navigateur pour mettre en cache les demandes de réseau, qui est souvent utilisée en conjonction avec travailleur de service pour améliorer les performances du site Web et l'expérience hors ligne. 1. Il permet aux développeurs de stocker manuellement des ressources telles que des scripts, des feuilles de style, des photos, etc.; 2. Il peut faire correspondre les réponses du cache en fonction des demandes; 3. Il prend en charge la suppression des caches spécifiques ou la nettoyage du cache entier; 4. Il peut mettre en ?uvre des stratégies de priorité de cache ou de priorité de réseau grace à l'écoute des événements Fetch; 5. Il est souvent utilisé pour le support hors ligne, accélérez la vitesse d'accès répétée, préchargement des ressources clés et du contenu de mise à jour des antécédents; 6. Lorsque vous l'utilisez, vous devez faire attention au contr?le de la version du cache, aux restrictions de stockage et à la différence entre le mécanisme de mise en cache HTTP.

JS Roundup: une plongée profonde dans la boucle d'événement JavaScript JS Roundup: une plongée profonde dans la boucle d'événement JavaScript Jul 08, 2025 am 02:24 AM

La boucle d'événement de JavaScript gère les opérations asynchrones en coordonnant les piles d'appels, les webapis et les files d'attente de taches. 1. La pile d'appels exécute du code synchrone, et lors de la rencontre de taches asynchrones, il est remis à WebAPI pour le traitement; 2. Une fois que le WebAPI a terminé la tache en arrière-plan, il met le rappel dans la file d'attente correspondante (macro tache ou micro tache); 3. La boucle d'événement vérifie si la pile d'appels est vide. S'il est vide, le rappel est retiré de la file d'attente et poussé dans la pile d'appels pour l'exécution; 4. Micro taches (comme Promise. puis) ??prendre la priorité sur les taches macro (telles que Settimeout); 5. Comprendre la boucle d'événements permet d'éviter de bloquer le thread principal et d'optimiser l'ordre d'exécution du code.

Comprendre l'événement bouillonnant et capturer dans les événements JavaScript DOM Comprendre l'événement bouillonnant et capturer dans les événements JavaScript DOM Jul 08, 2025 am 02:36 AM

Les bulles d'événements se propagent de l'élément cible vers l'extérieur vers le n?ud d'ancêtre, tandis que la capture d'événements se propage de la couche externe vers l'intérieur vers l'élément cible. 1. événements Bubbles: Après avoir cliqué sur l'élément enfant, l'événement déclenche l'auditeur de l'élément parent vers le haut. Par exemple, après avoir cliqué sur le bouton, il sortira d'abord cliqué sur l'enfant, puis parent. 2. Capture d'événement: définissez le troisième paramètre sur true, afin que l'auditeur soit exécuté dans l'étape de capture, tels que le déclenchement de l'écouteur de capture de l'élément parent avant de cliquer sur le bouton. 3. Les utilisations pratiques incluent la gestion unifiée des événements d'éléments enfants, le prétraitement d'interception et l'optimisation des performances. 4. Le flux d'événements DOM est divisé en trois étapes: capture, cible et bulle, et l'écouteur par défaut est exécuté dans l'étape de la bulle.

Un tour d'horizon des fonctions d'ordre supérieur au-delà de la carte et du filtre Un tour d'horizon des fonctions d'ordre supérieur au-delà de la carte et du filtre Jul 10, 2025 am 11:41 AM

Dans les tableaux JavaScript, en plus de la carte et du filtre, il existe d'autres méthodes puissantes et rarement utilisées. 1. La réduction peut non seulement résumer, mais également compter, se regrouper, aplatir les tableaux et construire de nouvelles structures; 2. Find et FindIndex sont utilisés pour trouver des éléments ou des index individuels; 3.Il et tout sont utilisés pour déterminer si les conditions existent ou que toutes les personnes se rencontrent; 4.Sort peut être trié mais changera le tableau d'origine; 5. Faites attention à la copie du tableau lorsque vous l'utilisez pour éviter les effets secondaires. Ces méthodes rendent le code plus concis et efficace.

See all articles