[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/fr/docs/Web/API/HTMLScriptElement/textContent [Back]  [Original]

HTMLScriptElement : proprit textContent - Les API Web | MDN

Cette page a t traduite partir de l'anglais par la communaut. Vous pouvez contribuer en rejoignant la communaut francophone sur MDN Web Docs.

View in English Always switch to English

HTMLScriptElement : proprit textContent

Baseline Large disponibilit *

Cette fonctionnalit est bien tablie et fonctionne sur de nombreux appareils et versions de navigateurs. Elle est disponible sur tous les navigateurs depuis juillet 2015.

* Certaines parties de cette fonctionnalit peuvent bnficier de prise en charge variables.

Attention : Cette proprit reprsente le contenu textuel d'un lment script, qui peut tre excutable selon le type du script. Les API de ce type sont appeles points d'injection et peuvent constituer un vecteur d'attaques de cross-site scripting (XSS).

Vous pouvez attnuer ce risque en affectant systmatiquement des objets TrustedScript plutt que des chanes de caractres et en appliquant les types de confiance. Voir Considrations de scurit pour plus d'informations.

La proprit textContent de l'interface HTMLScriptElement reprsente le contenu textuel en ligne de l'lment HTML <script>. Elle se comporte de la mme manire que les proprits text et innerText.

Dans cet article

Valeur

La lecture de la proprit retourne une chane de caractres contenant le texte du script.

L'affectation de la proprit accepte soit un objet TrustedScript soit une chane de caractres.

Exceptions

TypeError

Leve si la proprit est affecte avec une chane de caractres lorsque les types de confiance sont appliqus par une CSP et qu'aucune politique par dfaut n'est dfinie.

Description

La proprit textContent de l'interface HTMLScriptElement reprsente le contenu textuel l'intrieur de l'lment <script>.

Pour un script excutable (c'est--dire un script dont type indique qu'il s'agit d'un module ou d'un script classique), ce texte est du code excutable en ligne. Pour d'autres types, il peut s'agir d'une carte d'imports, de rgles de spculation ou d'un autre type de bloc de donnes.

Notez que si la proprit src est dfinie, le contenu de la proprit textContent est ignor.

La proprit textContent est galement dfinie sur Node et peut donc tre utilise avec d'autres nuds (et lments). Lorsqu'elle est utilise avec d'autres lments, la proprit n'attend pas et n'impose pas l'affectation d'un objet TrustedScript.

Considrations de scurit

La proprit textContent ainsi que les proprits identiques text et innerText peut constituer un vecteur d'attaques de cross-site scripting (XSS), o des chanes de caractres potentiellement non scurises fournies par une utilisateurice sont excutes. Par exemple, l'exemple suivant suppose que scriptElement est un lment <script> excutable, et que untrustedCode a t fourni par une utilisateurice :

js
const untrustedCode = "alert('Code potentiellement malveillant !');";
scriptElement.textContent = untrustedCode; // affiche l'alerte

Vous pouvez attnuer ces problmes en affectant systmatiquement des objets TrustedScript plutt que des chanes de caractres, et en appliquant les types de confiance l'aide de la directive CSP require-trusted-types-for. Cela garantit que la valeur passe par une fonction de transformation, qui a la possibilit de nettoyer ou de rejeter le texte avant son injection.

Le comportement de la fonction de transformation dpendra du cas d'utilisation spcifique ncessitant un script fourni par une utilisateurice. Si possible, vous devez restreindre les scripts autoriss exactement au code que vous souhaitez excuter. Si cela n'est pas possible, vous pouvez autoriser ou bloquer l'utilisation de certaines fonctions dans la chane de caractres fournie.

Exemples

Utiliser TrustedScript

Pour attnuer le risque d'XSS, vous devez toujours affecter des instances de TrustedScript la proprit textContent.

Les types de confiance ne sont pas encore pris en charge par tous les navigateurs, donc dfinissons d'abord le tinyfill des types de confiance. Cela agit comme un remplacement transparent de l'API JavaScript Trusted Types :

js
if (typeof trustedTypes === "undefined")
  trustedTypes = { createPolicy: (n, rules) => rules };

Ensuite, nous crons une TrustedTypePolicy qui dfinit une mthode createScript() pour transformer des chanes de caractres en instances de TrustedScript. Pour cet exemple, nous n'autoriserons que le script exact dont nous avons besoin.

js
const policy = trustedTypes.createPolicy("inline-script-policy", {
  createScript(input) {
    // Ici, dfinissez les scripts autoriss
    if (input === "const num = 10;\nconsole.log(num)") {
      return input; // autorise ce script exact
    }
    throw new TypeError(`Script non approuv bloqu : ${input}`);
  },
});

Ensuite, crez l'lment script auquel vous assignerez la valeur et obtenez une rfrence cet lment.

html
<script id="el"></script>
js
// Rcupre l'lment script dans lequel nous injectons le code
const el = document.getElementById("el");

Ensuite, utilisez l'objet policy pour crer un objet trustedScript partir de la chane de caractres potentiellement non scurise, puis assignez le rsultat l'lment :

js
// Chane potentiellement malveillante
const untrustedScriptOne = "const num = 10;\nconsole.log(num)";

// Cre une instance de TrustedScript en utilisant la politique
const trustedScript = policy.createScript(untrustedScriptOne);

// Injecte le TrustedScript (qui contient une chane de caractres approuve)
el.textContent = trustedScript;

Comparaison entre textContent, text et innerText

Cet exemple montre qu'affecter un script chacune des proprits textuelles, comme textContent, donne la mme valeur lue depuis toutes les proprits textuelles.

Notez que dans ce cas, nous n'utilisons pas la politique pour crer des scripts approuvs (par souci de concision, nous supposerons que les chanes fournies sont approuves).

js
// Affecte la proprit textContent
el.textContent = "console.log(10);";

console.log(`textContent: ${el.textContent}`);
// "textContent: console.log(10);"

console.log(`text: ${el.text}`);
// "text: console.log(10);"

console.log(`innerText: ${el.innerText}`);
// "innerText: console.log(10);"

// Affecte la proprit text
el.text = "const num = 10;\nconsole.log(num)";

console.log(`textContent: ${el.textContent}`);
// textContent: const num = 10; console.log(num)"

console.log(`text: ${el.text}`);
// "text: const num = 10; console.log(num)"

console.log(`innerText: ${el.innerText}`);
// "innerText: const num = 10; console.log(num)"

// Affecte la proprit innerText
el.innerText = "const num = 10;alert('Aide')";

console.log(`textContent: ${el.textContent}`);
// textContent: const num = 10;alert('Aide')"

console.log(`text: ${el.text}`);
// "text: const num = 10;alert('Aide')"

console.log(`innerText: ${el.innerText}`);
// "innerText: const num = 10;alert('Aide')"

Spcifications

Spcification
Trusted Types
# dom-htmlscriptelement-textcontent

Compatibilit des navigateurs

Voir aussi


Web Proxy Viewer  |  New URL  |  Original Page