Réduisez la surface d'attaque DOM XSS de votre application.
Sûr et sécurisé
Pourquoi devriez-vous vous en soucier?
Le script intersite basé sur DOM (DOM XSS) est l'une des vulnérabilités de sécurité Web les plus courantes et il est très facile de l'introduire dans votre application. Types de confiance
Brindarle las herramientas para escribir, revisar la seguridad y mantener aplicaciones libres de vulnerabilidades DOM XSS al hacer que las peligrosas funciones de la APIConcepto de API¿Qué es una API?Una API, siglas de Application Programming Interface o Interfaz de Programación de Apps, es un recopilatorio de código que se puede emplear para que varias apps se comuniquen entre ellas. Es algo que realiza una tarea equivalente a la interfaz de usuario al momento de promover la interacción entre persona y programa, solo que aplicado única y exclusivamente dentro del entorno del software.Aún cuando suene Suite web sean seguras de manera predeterminada. Los tipos de confianza son compatibles con Chrome 83 y polyfill está disponible para otros navigateursConcepto de Navegadores¿Qué son los Navegadores?Los Navegadores son herramientas informáticas que utilizamos para, normalmente, navegar por Internet y visitar cualquier página web, al mismo tiempo de para hacer otras tareas como ver documentos, observar vídeos o reproducir contenido multimedia de cualquier tipo. Son un tipo de software sencillamente usual y bastante utilizado hoy en día.Insistimos en que es algo que se utiliza con mucha frecuencia, puesto que moverse por Internet Suite. Regarder Compatibilité du navigateur pour obtenir des informations à jour sur la compatibilité entre navigateurs.
Terme clé:
Les scripts intersites basés sur DOM se produisent lorsque les données d'un utilisateur contrôlent
Fontaine (como el nombre de usuario o la URLEl URL (Localizador Uniforme de Recursos), es una dirección definida que apunta a la posición de un archivo en un servidor y lo recupera. Las URL se introducen en un navegador web para ingresar a documentos en la web o se incrustan como hipervínculos dentro de un documento. Se puede usar un Permalink para que una URL esté disponible de forma permanente. Componentes de una URL • prefijo de protocolo Suite de redireccionamiento tomada del fragmento de URL) alcanza un couler, qui est une fonction comme eval () ou un créateur de propriété comme
.innerHTML, que puede ejecutar código JavaScriptJavaScript es un lenguaje de programación que funciona en el lado del cliente y con el que las webs pueden ser más funcionales. Incorporación en código HTML El código JavaScript puede ser incrustado en las páginas HTML, para que adquieran funcionalidad. Existen varias opciones. Puede estar entre las etiquetas <SCRIPT> y </SCRIPT>, puede estar contenido en un archivo externo, puede ser un parámetro de las etiquetas HTML, y puede estar Suite arbitrario.
Antécédents
Pendant de nombreuses années DOM XSS
il s'agit de l'une des vulnérabilités de sécurité Web les plus fréquentes et les plus dangereuses.
Hay dos grupos distintos de secuencias de comandos entre sitios. Algunas vulnerabilidades XSS son causadas por el código del lado del serveurLos servidores son ordenadores centrales y potentes dentro del campo de la tecnología de la información que procesan y proporcionan software y archivos en una red. Desde el punto de vista de un cliente, varios ordenadores en una red pueden ponerse en contacto con el servidor central para conseguir la información solicitada. En la arquitectura cliente-servidor, el servidor puede ser un software que proporciona un servicio y se ejecuta en Suite que crea de manera insegura el código HTMLHTML (Hypertext Markup Language) se usa para estructurar el contenido de texto de un documento web. No sólo se marca el contenido, sino además la meta-información que describe este contenido. Las páginas HTML se almacenan normalmente en el directorio raíz del servidor. Cómo se creó En la era digital, a los usuarios les resulta difícil hallar su camino en las webs y hacer un seguimiento de las estructuras de las Suite que forma el sitio web. Otros tienen una causa raíz en el cliente, donde el código JavaScript llama a funciones peligrosas con ContenuEl contenido puede ser muy difícil de definir con precisión. Es una definición que se refiere a las declaraciones contenidas en un documento o publicación de cualquier tipo y puede incluir las tecnologías de la información y la comunicación. Esto cubre todos los tipos de medios como imágenes y texto. A parte de esto, en el campo de la optimización de motores de búsqueda, los términos duplicar contenido, contenido único, Suite controlado por el usuario.
À éviter XSS côté serveurVeuillez ne pas générer de HTML par concaténation de chaînes et utiliser des bibliothèques de modèles sécurisées avec échappement automatique contextuel. Utiliser un Politique de sécurité du contenu non basée sur la sécurité pour une atténuation supplémentaire contre les erreurs qui se produisent inévitablement.
Ahora, un le navigateurUn navegador (además: browser) es una herramienta informática que te permite ver documentos y datos y navegar por la red. Los navegadores pueden mostrar distintos tipos de recursos de información; principalmente documentos HTML, a pesar de todo, además son posibles otros tipos de archivos y contenido multimedia, como PDF, JPEG, MPEG, GIF o el lenguaje de meta marcado. A través el uso de complementos especiales y la configuración respectivo, los Suite también puede ayudar a prevenir los XSS del lado del cliente (también conocidos como basados en DOM) con Types de confiance.
Introduction à l'API
Les types d'approbation fonctionnent en bloquant les fonctions de puits de risque suivantes. Vous pouvez déjà reconnaître certains d'entre eux, tels que les fournisseurs de navigateurs et cadres Web vous empêche déjà d'utiliser ces fonctionnalités pour des raisons de sécurité.
-
Manipulation de script:
et configurer le contenu textuel deéléments. -
Générer du HTML à partir d'une chaîne:
innerHTML,externeHTML,insertAdjacentHTML,
,
document.write,document.writelnyDOMParser.parseFromString -
Compilation du code JavaScript au moment de l'exécution:
évaluer,setTimeout,setInterval,nouvelle fonction ()
Les types de confiance nécessitent que vous traitiez les données avant de les transmettre aux fonctions de récepteur ci-dessus. Le simple fait d'utiliser une chaîne échouera, car le navigateur ne sait pas si les données sont fiables:
Pas
anElement.innerHTML = location.href;
Lorsque les types approuvés sont activés, le navigateur lance un Faute de frappe et évitez d'utiliser un récepteur DOM XSS avec une chaîne.
Pour indiquer que les données ont été traitées de manière sécurisée, créez un objet spécial: un type de confiance.
Faire
anElement.innerHTML = aTrustedHTML;
Lorsque les types de confiance sont activés, le navigateur accepte un TrustedHTML objet pour les écouteurs qui attendent des extraits de code HTML. Il y a aussi TrustedScript y TrustedScriptURL Objets pour autres puits sensibles.
Les types de confiance réduisent considérablement le DOM XSS surface d'attaque
de votre application. Il simplifie les contrôles de sécurité et vous permet d'appliquer des contrôles de sécurité basés sur le type qui sont effectués lors de la compilation, de la liaison ou de l'empaquetage de votre code au moment de l'exécution, dans le navigateur.
Comment utiliser les types d'approbation
Préparer les rapports de violation de politique de sécurité du contenu
Puede implementar un recopilador de informes (como el de Open sourceEl Código Abierto u Open Source se refiere al código fuente del software que es abiertamente alcanzable y que puede ser cambiado y distribuido por cualquier persona. La propuesta de código abierto estipula diez requerimientos para las licencias de software de código abierto. El principio El código fuente de un software se hace público: cualquiera puede leerlo, desarrollar el propio software y copiarlo. El software puede ser utilizado o distribuido Suite go-csp-collector) ou utilisez l'un des équivalents commerciaux. Vous pouvez également déboguer les violations dans le navigateur:
la fenêtre.addEventListener('securitypolicyviolation',
console.Erreur.bind(console));
Agregue el siguiente encabezado de respuesta HTTPEl HTTP (Hyper Text Transfer Protocol) es un protocolo que se usa para transmitir datos en redes. HTTP es un estándar técnico generalmente aceptado que establece cómo un cliente web se comunica con un servidor para que los datos solicitados por el cliente puedan ser cargados y mostrados. Información general Junto con el URL y el HTML, HTTP es uno de los conceptos más importantes de Internet (www). Fue desarrollado Suite a los documentos que desea migrar a tipos de confianza.
Content-Security-Policy-Report-Only: require-trusted-types-for 'script'; report-uri //my-csp-endpoint.example
Désormais, toutes les violations sont signalées à //my-csp-endpoint.example, mais le site Web fonctionne toujours. La section suivante explique comment //my-csp-endpoint.example emplois.
Mise en garde:
Les types d'approbation ne sont disponibles que dans contexte sûr
Quoi HTTPSHTTPS (protocolo de Transferencia de Hiper-Texto) es un protocolo que permite determinar una conexión segura entre el servidor y el cliente, que no puede ser interceptada por personas no autorizadas. En resumidas cuentas, es la versión segura de el http (Hyper Text Transfer Protocol) Cómo funciona Una conexión HTTP estándar en Internet puede ser fácilmente secuestrada por partes no autorizadas. El propósito de una conexión HTTPS es evitar esto: encriptar Suite y localhost.
Identifier les violations de type de confiance
Désormais, chaque fois que Trusted Types détecte une violation, un rapport est envoyé à un rapport-uri. Par exemple, lorsque votre application transmet une chaîne à innerHTML, le navigateur envoie le rapport suivant:
{
"csp-report": {
"document-uri": "https://my.url.example",
"violated-directive": "require-trusted-types-for",
"disposition": "report",
"blocked-uri": "trusted-types-sink",
"line-number": 39,
"column-number": 12,
"source-file": "https://my.url.example/script.js",
"status-code": 0,
"script-sample": "Element innerHTML <img src=x"
}
}
Cela dit que dans https://my.url.example/script.js en ligne 39 innerHTML a été appelé avec la chaîne commençant par <img src=x. Ces informations devraient vous aider à déterminer quelles parties de votre code peuvent introduire DOM XSS et devraient changer.
La plupart des violations comme celle-ci peuvent également être détectées en exécutant un linter de code ou vérificateurs de code statiques
dans votre base de code. Cela permet d'identifier rapidement un grand nombre de violations.
Cela dit, vous devez également examiner les violations de CSP car elles sont déclenchées lorsque du code non conforme s'exécute.
Corrigez les infractions
Il existe plusieurs options pour corriger une violation de type d'approbation. Vous pouvez supprimer le code incriminé, utiliser une bibliothèque, créer une stratégie de type d'approbation ou, en dernier recours, créer une stratégie par défaut.
Réécrire le code incriminé
Peut-être que la fonctionnalité non conforme n'est plus nécessaire ou peut être réécrite de manière moderne sans utiliser les fonctions sujettes aux bogues?
Pas
il.innerHTML = '<img src=xyz.jpg>';
Faire
il.textContent = '';
const img = document.createElement('img');
img.src = 'xyz.jpg';
il.appendChild(img);
Utiliser une bibliothèque
Certaines bibliothèques génèrent déjà des types de confiance que vous pouvez transmettre aux fonctions du récepteur. Par exemple, vous pouvez utiliser
DOMPurifier pour nettoyer un extrait de code HTML, en supprimant les charges utiles XSS.
importer DOMPurifier desde 'dompurify';
il.innerHTML = DOMPurifier.sanitize(html, {RETURN_TRUSTED_TYPE: vrai);
DOMPurifier prend en charge les types de confiance et il renverra du HTML nettoyé enveloppé dans un TrustedHTML objet afin que le navigateur ne génère pas de violation.
Mise en garde:
Si la logique de nettoyage dans DOMPurify est boguée, votre application peut toujours avoir une vulnérabilité DOM XSS. Les types de confiance vous obligent à traiter une valeur en quelque sorte, mais ne définissez pas encore quelles sont les règles de traitement exactes et si elles sont sécurisées.
Créer une stratégie de type d'approbation
Parfois, il n'est pas possible de supprimer la fonctionnalité et il n'y a pas de bibliothèque pour nettoyer la valeur et créer un type de confiance pour vous. Dans ces cas, créez vous-même un objet Trusted Type.
Pour cela, créez d'abord un politique. Les politiques sont des usines de types de confiance qui imposent certaines règles de sécurité à leur entrée:
si (la fenêtre.trustedTypes &Concepto de AMP¿Qué es el AMP o Accelerated Mobile Pages?El AMP, abreviatura de Accelerated Mobile Pages, es una propuesta que empezó a tomar forma en el año 2016 con la finalidad de mejorar la usabilidad, lectura y, en general, la experiencia de los usuarios de teléfono celular dentro de cualquier página web. Emprendida por Google con un aperturismo total (es de código abierto), lleva en activo desde entonces para facilitar Suite;& trustedTypes.createPolicy) {
const escapeHTMLPolicy = trustedTypes.createPolicy('myEscapePolicy', {
createHTML: string => string.replace(/</g, '<')
});
}
Ce code crée une stratégie appelée myEscapePolicy ce qui peut produire TrustedHTML
objets à travers leur createHTML () une fonction. Les règles définies échapperont au HTML < caractères pour éviter de créer de nouveaux éléments HTML.
Utilisez la politique comme ceci:
const escaped = escapeHTMLPolicy.createHTML('<img src=x onerror=alert(1)>');
console.Journal(escaped instanceof TrustedHTML);
il.innerHTML = escaped;
Alors que la fonction JavaScript est arrivée à TrustedTypes.createPolicy () Quoi
createHTML () renvoie une chaîne, createPolicy () renvoie un objet de stratégie qui encapsule la valeur de retour dans un type correct, dans ce cas TrustedHTML.
Utiliser une politique par défaut
Parfois, le code incriminé ne peut pas être modifié. Par exemple, c'est le cas si vous chargez une bibliothèque tierce à partir d'un CDN. Dans ce cas, utilisez un
politique par défaut:
si (la fenêtre.trustedTypes && trustedTypes.createPolicy) {
trustedTypes.createPolicy('default', {
createHTML: (string, sink) => DOMPurifier.sanitize(string, {RETURN_TRUSTED_TYPE: vrai});
});
}
La politique avec nom défaut il est utilisé chaque fois qu'une chaîne est utilisée dans un récepteur qui n'accepte que le type de confiance.
Utilisez la stratégie par défaut avec parcimonie et préférez refactoriser votre application pour utiliser à la place des stratégies régulières. Cela encourage les conceptions où les règles de sécurité sont proches des données qu'elles traitent, où vous avez le plus de contexte pour nettoyer correctement la valeur.
Changement pour appliquer la politique de sécurité du contenu
Lorsque votre application ne viole plus, vous pouvez commencer à appliquer les types d'approbation:
Content-Security-Policy: exigent-des-types-approuvés-pour 'script'; report-uri //my-csp-endpoint.example
Voila! Maintenant, quelle que soit la complexité de votre application Web, la seule chose qui peut introduire une vulnérabilité DOM XSS est le code dans l'une de vos politiques, et vous pouvez la bloquer encore plus si limiter l'élaboration des politiques.
Autres lectures




