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

HTMLScriptElement : proprit src - 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 src

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 l'URI d'un script externe charg dans l'lment HTML <script>, qui peut tre excutable selon la valeur de la proprit type. 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 dfinissant une Politique de scurit du contenu (CSP) qui restreint les emplacements d'o les scripts peuvent tre chargs, et en affectant systmatiquement des objets TrustedScriptURL plutt que des chanes, ainsi qu'en appliquant les types de confiance. Voir Considrations de scurit pour plus d'informations.

La proprit src de l'interface HTMLScriptElement est une chane de caractres qui reprsente l'URL d'un script externe ; cela peut tre utilis comme alternative l'intgration directe d'un script dans un document.

Elle reflte l'attribut src de l'lment HTML <script>.

Dans cet article

Valeur

La lecture de la proprit retourne une chane contenant l'URI du script de l'lment.

L'affectation de la proprit accepte soit un objet TrustedScriptURL 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. Elle est galement leve si l'URL rcupre ne peut pas tre analyse correctement comme le type indiqu, par exemple un module ou un importmap.

Description

La proprit src reprsente l'URL d'un script externe. Si elle est dfinie, les scripts fournis via les proprits de texte text, textContent ou innerText sont ignors.

Considrations de scurit

La proprit src est utilise pour charger et excuter des scripts externes. Le script rcupr s'excute dans le contexte de la page courante et peut donc faire tout ce que peut faire le code de votre site (mme si l'URL n'est pas de la mme origine que votre site). Si l'entre est fournie par une utilisateurice, cela constitue un vecteur possible d'attaques de cross-site scripting (XSS).

Il est extrmement risqu d'accepter et d'excuter des URL arbitraires provenant d'origines non fiables. Un site Web doit contrler les scripts autoriss s'excuter en dfinissant une Politique de scurit du contenu (CSP) avec la directive script-src (ou un repli dfini dans default-src). Cela permet de restreindre les scripts ceux provenant de l'origine courante, d'un ensemble spcifique d'origines, ou mme de fichiers particuliers.

Si vous utilisez cette proprit et que vous appliquez les types de confiance (en utilisant la directive CSP require-trusted-types-for), vous devrez toujours affecter des objets TrustedScriptURL plutt que des chanes. Cela garantit que la valeur passe par une fonction de transformation, qui a la possibilit de rejeter ou de modifier l'URL avant son injection.

Mme si la ressource est approuve par votre site, elle peut toujours tre compromise lors d'une attaque contre la chane d'approvisionnement. Pour vous protger contre ce type d'attaque, vous devez utiliser la fonctionnalit subresource integrity.

Exemples

Utiliser TrustedScriptURL

Pour attnuer le risque d'XSS, vous devez toujours affecter des instances de TrustedScriptURL la proprit src. Vous devez galement le faire si vous appliquez les types de confiance pour d'autres raisons et que vous souhaitez autoriser certaines sources de scripts qui ont t permises (par CSP: script-src).

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 des types de confiance :

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

Ensuite, nous crons une TrustedTypePolicy qui dfinit une mthode createScriptURL() pour transformer des chanes de caractres en instances de TrustedScriptURL.

Dans cet exemple, supposons que vous souhaitiez autoriser un ensemble prdfini d'URL dans le tableau scriptAllowList et consigner les autres scripts.

js
const scriptAllowList = [
  // Liste d'URL autorises
];
const policy = trustedTypes.createPolicy("script-url-policy", {
  createScriptURL(input) {
    if (scriptAllowList.includes(input)) {
      return input; // autorise le script
    }
    console.log(`Script pas prsent dans scriptAllowList : ${input}`);
    return ""; // Bloque le script
  },
});

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, nous utilisons l'objet policy pour crer une instance de trustedScriptURL partir de la chane de caractres potentiellement non scurise, puis nous assignons le rsultat l'lment :

js
// Chane potentiellement malveillante
// Nous n'inclurons pas untrustedScriptURL dans notre tableau scriptAllowList
const untrustedScriptURL = "https://evil.example.com/naughty.js";

// Create a TrustedScriptURL instance using the policy
const trustedScriptURL = policy.createScriptURL(untrustedScriptURL);

// Injecte le TrustedScriptURL (qui contient une URL approuve)
el.src = trustedScriptURL;

Lire la proprit src

Supposons que le code s'excute sur un site dont l'URL est  https://example.com&nbsp;.

html
<script id="script-with-src" type="module" src="/main.js"></script>
<script id="script-without-src" type="module"></script>
js
const script_with_src = document.getElementById("script-with-src");
console.log(script_with_src.src); // Affiche : "https://example.com/main.js"
const script_without_src = document.getElementById("script-without-src");
console.log(script_without_src.src); // Affiche : ""

Spcifications

Spcification
HTML
# dom-script-src

Compatibilit des navigateurs


Web Proxy Viewer  |  New URL  |  Original Page