En-tête Integrity-Policy
L'en-tête de réponse HTTP Integrity-Policy permet aux administrateur·ice·s de site web de s'assurer que toutes les ressources chargées par l'agent utilisateur (d'un certain type) bénéficient des garanties de l'intégrité des sous-ressources.
Lorsqu'il est défini, l'agent utilisateur bloquera les requêtes sur les destinations de requête définies qui omettent les métadonnées d'intégrité, et bloquera également les requêtes en mode no-cors avant même qu'elles ne soient effectuées.
Des rapports de violation peuvent également être envoyés si l'en-tête inclut un nom de point de terminaison de rapport qui correspond à un point de terminaison déclaré à l'aide de l'en-tête Reporting-Endpoints.
Les rapports sont générés à l'aide de l'API Reporting et peuvent également être observés dans la page pour laquelle la politique d'intégrité est appliquée, à l'aide d'un ReportingObserver.
Le format du corps du rapport est donné par le dictionnaire IntegrityViolationReportBody (une forme sérialisée en JSON de ce corps est envoyée en POST aux points de terminaison du serveur de rapport).
Ceci aide à se prémunir contre la manipulation de contenu des sous-ressources récupérées.
| Type d'en-tête | En-tête de réponse |
|---|
Syntaxe
Integrity-Policy: blocked-destinations=(<destination>),sources=(<source>),endpoints=(<endpoint>)
Les valeurs de l'en-tête sont définies comme des dictionnaires de champs structurés avec les clés suivantes :
blocked-destinations-
Une liste de destinations de requête qui doivent inclure des métadonnées d'intégrité valides. Les valeurs autorisées sont :
sourcesFacultatif-
Une liste de sources d'intégrité qui doivent inclure des métadonnées d'intégrité. Les valeurs autorisées sont :
inline-
La source des métadonnées d'intégrité est incluse dans le contenu, comme l'attribut d'intégrité. Il s'agit de la valeur par défaut.
Comme il s'agit de la valeur par défaut et de la seule valeur, omettre
sourceséquivaut à définirsources=(inline).
endpointsFacultatif-
Une liste de noms de points de terminaison de rapport qui indiquent où les rapports seront envoyés. Les points de terminaison de rapport doivent être définis dans un en-tête
Reporting-Endpoints.
Exemples
>Bloquer et signaler lorsque les scripts n'ont pas de métadonnées d'intégrité
Cet exemple montre un document qui bloque et signale lorsque l'élément HTML <script> (ou HTMLScriptElement) ne définit pas d'attribut integrity, ou lorsqu'une ressource de script est demandée en mode no-cors.
Notez que le integrity-endpoint utilisé dans Integrity-Policy est défini dans l'en-tête Reporting-Endpoints.
Reporting-Endpoints: integrity-endpoint="https://exemple.com/integrity", backup-integrity-endpoint="https://report-provider.exemple/integrity"
Integrity-Policy: blocked-destinations=(script), endpoints=(integrity-endpoint backup-integrity-endpoint)
La charge utile du rapport pourrait ressembler à ceci.
{
"type": "integrity-violation",
"url": "https://exemple.com",
"body": {
"documentURL": "https://exemple.com",
"blockedURL": "https://exemple.com/main.js",
"destination": "script",
"reportOnly": false
}
}
Spécifications
| Specification |
|---|
| Subresource Integrity> # integrity-policy-section> |