Passer au contenu principal

Bonnes pratiques pour définir votre politique de parrainage et utiliser le parrainage dans les demandes entrantes.


Mise à jour

Il apparaît dans:
Sûr et sécurisé

résumé

  • La fuite inattendue d'informations d'origine croisée nuit à la vie privée des internautes. Une politique d'aiguillage protecteur peut aider.
  • Envisagez d'établir une politique d'aiguillage pour origine-stricte-quand-origine-croisée. Il préserve une grande partie de l'utilité de l'expéditeur, tout en atténuant le risque de fuite de sources de données croisées.
  • N'utilisez pas de références de falsification de demandes intersites (CSRF). Utiliser jetons CSRF
    à la place, et d'autres en-têtes comme couche de sécurité supplémentaire.

Avant de commencer:

  • Si vous n'êtes pas sûr de la différence entre « site » et « origine », consultez Comprendre « même site » et « même origine ».
  • Les Référent L'en-tête manque un R, en raison d'une faute d'orthographe d'origine dans la spécification. Les
    Référent-Politique en-tête et référent en JavaScript et DOM, ils sont écrits correctement.

Référent et Référent-Politique 101

Les requêtes HTTP peuvent inclure l'option Référent

entête, qui indique l'origine ou l'URL de la page Web à partir de laquelle la demande a été effectuée. Les Référent-Politique

entête définit les données disponibles dans le Référent entête.

igraal_fr-fr

Dans l'exemple suivant, le Référent L'en-tête comprend l'URL complète de la page dans site-un d'où la demande a été faite.

referrer-basics-9699140

Les Référent L'en-tête peut être présent dans différents types de requêtes :

  • Requêtes de navigation, lorsqu'un internaute clique sur un lien
  • Demandes de sous-ressources, lorsqu'un navigateur demande des images, des iframes, des scripts et d'autres ressources dont une page a besoin.

Pour les navigations et les iframes, ces données sont également accessibles via JavaScript en utilisant
référent.document.

Les Référent La valeur peut être révélatrice. Par exemple, un service d'analyse peut utiliser la valeur pour déterminer que le 50% des visiteurs de site-deux.exemple Il est venu de réseau-social.exemple.

Mais lorsque l'url complète, y compris le chemin et la chaîne de requête, est envoyée dans le Référent par les origines, cela pourrait être entraver la vie privée et pose risques de sécurité aussi. Jetez un œil à ces URL :

referrer-urls-6903646

Les URL 1 à 5 contiennent des informations privées, parfois même identifiantes ou confidentielles. Les filtrer silencieusement à travers les sources peut compromettre la confidentialité des utilisateurs Web.

L'URL n. 6 est un URL de capacité. Vous ne voulez pas qu'il tombe entre les mains de quelqu'un d'autre que l'utilisateur prévu. Si cela se produit, un acteur malveillant pourrait détourner le compte de cet utilisateur.

Pour restreindre les données de référence disponibles aux demandes de votre site, vous pouvez définir une politique de référence.

Quelles politiques sont disponibles et en quoi sont-elles différentes ?

Vous pouvez sélectionner l'une des huit stratégies. Selon la politique, les données disponibles auprès du Référent
en-tête (et référent.document) Peut être:

  • Aucune donnée (non Référent l'en-tête est présent)
  • Juste l'origine
  • L'URL complète : source, chemin et chaîne de requête
referrer-data-1659020

Certaines politiques sont conçues pour se comporter différemment selon les le contexte- Demande d'origine croisée ou de même origine, sécurité (si la destination de la demande est aussi sécurisée que l'origine), ou les deux. Ceci est utile pour limiter la quantité d'informations partagées entre les origines ou pour les origines moins sécurisées, tout en conservant la richesse du référent au sein de votre propre site.

Voici un aperçu montrant comment les politiques de référencement restreignent les données d'URL disponibles dans l'en-tête du référent et référent.document:

referrer-policies-5521800

MDN fournit un liste complète des politiques et exemples de comportement.

Choses à garder à l'esprit:

  • Toutes les politiques qui prennent en compte le schéma (HTTPS vs. HTTP) (origine-stricte,
    aucun-référent-lorsque-déclassement y origine-stricte-quand-origine-croisée) traite les requêtes d'une source HTTP vers une autre source HTTP de la même manière que les requêtes d'une source HTTPS vers une autre source HTTPS, même si HTTP est moins sécurisé. C'est parce que pour ces politiques, ce qui compte, c'est si une sécurité dégrader se produit, c'est-à-dire si la demande peut exposer des données d'une source chiffrée à une source non chiffrée. Une requête HTTP → HTTP n'est pas cryptée tout le temps, il n'y a donc pas de dégradation. Les requêtes HTTPS → HTTP, en revanche, subissent une dégradation.
  • Si une demande est même origine, cela signifie que le schéma (HTTPS ou HTTP) est le même ; par conséquent, il n'y a pas de dégradation de la sécurité.

Politiques de référencement par défaut dans les navigateurs

En juillet 2020

Si aucune politique de référence n'est définie, la politique de navigateur par défaut sera utilisée.

Le navigateur Défaut Référent-Politique / Comportement
Chrome

Planification de passer à origine-stricte-quand-origine-croisée au version 85 (précédemment aucun-référent-lorsque-déclassement)

Firefox
  • aucun-référent-lorsque-déclassement
  • Considérant origine-stricte-quand-origine-croisée
  • origine-stricte-quand-origine-croisée en navigation privée et pour les trackers
Bord
  • aucun-référent-lorsque-déclassement
  • Expérimenter avec origine-stricte-quand-origine-croisée
Safari

Semblable à origine-stricte-quand-origine-croisée. Regarder
Prévention du suivi Prévention du suivi pour plus de détails.

Mise en place de votre politique de référencement : bonnes pratiques

Objectif: Établir explicitement une politique d'amélioration de la confidentialité, telle que
origine-stricte-quand-origine-croisée(ou plus strict).

Il existe différentes manières de définir des politiques de référencement pour votre site :

Vous pouvez définir différentes stratégies pour différentes pages, demandes ou éléments.

L'en-tête HTTP et l'élément méta sont au niveau de la page. L'ordre de priorité lors de la détermination de la politique effective d'un élément est :

  1. Stratégie au niveau de l'élément
  2. Politique au niveau de la page
  3. Navigateur par défaut

Exemple:

index.html:

< meta name = " referrer " content = " strict-origin-when-cross-origin " />
< img src = " ... " referrerpolicy = " no-referrer-when-downgrade " />

L'image sera demandée avec un aucun-référent-lorsque-déclassement politique, tandis que toutes les autres demandes de ressources enfants sur cette page suivront la origine-stricte-quand-origine-croisée politique.

Comment voir la politique de référencement ?

Lors de l'inspection d'une requête HTTP :

  • Dans Chrome, Edge et Firefox, vous pouvez voir le Référent-Politique.
  • Dans Chrome, Edge, Safari et Firefox, vous pouvez voir le Référent.

referrer-devtools-4780185

Outils de développement Chrome, Rapporter panneau avec une demande sélectionnée.

Quelle politique devez-vous définir pour votre site Web ?

Résumé : Définir explicitement une politique d'amélioration de la confidentialité comme origine-stricte-quand-origine-croisée (ou plus strict).

Pourquoi « explicitement » ?

Si aucune politique de référence n'est définie, la politique de navigateur par défaut sera utilisée ; en fait, les sites Web cèdent souvent à la valeur par défaut du navigateur. Mais ce n'est pas idéal, car :

  • Les stratégies de navigateur par défaut sont aucun-référent-lorsque-déclassement,
    origine-stricte-quand-origine-croiséeou plus strict, selon le navigateur et le mode (privé / incognito). Par conséquent, votre site Web ne se comportera pas de manière prévisible dans tous les navigateurs.
  • Les navigateurs adoptent des valeurs par défaut plus strictes, telles que origine-stricte-quand-origine-croisée et des mécanismes comme écrêtage de référence pour les applications d'origine croisée. Opter explicitement pour une politique d'amélioration de la confidentialité avant que les paramètres par défaut du navigateur ne changent vous donne le contrôle et vous aide à exécuter les tests comme bon vous semble.

Parce que origine-stricte-quand-origine-croisée (ou plus strict) ?

Vous avez besoin d'une politique sécurisée, qui améliore la confidentialité et qui soit utile ; ce que "utile" signifie dépend de ce que vous attendez de l'expéditeur :

  • Assurance- Si votre site Web utilise HTTPS (sinon, faites-en une priorité), vous ne voulez pas que les URL de votre site Web soient divulguées dans les requêtes non HTTPS. Étant donné que n'importe qui sur le réseau peut les voir, cela exposerait vos utilisateurs à des attaques de type "personne du milieu". Les policiers aucun-référent-lorsque-déclassement,
    origine-stricte-quand-origine-croisée, aucun référent y origine-stricte Résoudre ce problème.
  • Amélioration de la confidentialité: pour une demande cross-origin, aucun-référent-lorsque-déclassement comparte la URL completa; esto no mejora la privacidad. origine-stricte-quand-origine-croisée y origine-stricte solo comparte el origen, y aucun référent no comparte nada en absoluto. Esto te deja con
    origine-stricte-quand-origine-croisée, origine-strictey aucun référent como opciones para mejorar la privacidad.
  • Utile: aucun référent y origine-stricte nunca comparta la URL completa, incluso para solicitudes del mismo origen, por lo que si necesita esto, origine-stricte-quand-origine-croisée es una mejor opción.

Todo esto significa que origine-stricte-quand-origine-croisée es generalmente una opción sensata.

Ejemplo: establecer un origine-stricte-quand-origine-croisée política:

index.html:

<meta name="referrer" content="strict-origin-when-cross-origin" />

O del lado del servidor, por ejemplo en Express:

const helmet = require('helmet');
app.use(helmet.referrerPolicy({policy: 'strict-origin-when-cross-origin'}));

Et si origine-stricte-quand-origine-croisée (o más estricto) no se adapta a todos sus casos de uso?

En este caso, no establezca una política insegura como unsafe-url. Lo que puede hacer en cambio es tomar un
enfoque progresivo: establezca una política de protección para su sitio web y, si es necesario, una política más permisiva para solicitudes o elementos específicos.

Exemple:

index.html:

<meta name="referrer" content="strict-origin-when-cross-origin" />
<img src="" referrerpolicy="no-referrer-when-downgrade" />

script.js:

fetch(url, {referrerPolicy: 'no-referrer-when-downgrade'});

Gotchas!

Una política por elemento no es compatible con todos los navegadores navegadores (Ejemplos: referrerpolicy afin de à

éléments, afin de img éléments, y para relier éléments). Pero los navegadores que no admiten esto tienden a adoptar un enfoque estricto de todos modos (por ejemplo, todas las solicitudes de origen cruzado se establecerán Référent al origen).

Que devriez-vous considérer d'autre ?

Su política debe depender de su sitio web y de los casos de uso; esto depende de usted, su equipo y su empresa. Si algunas URL contienen datos de identificación o confidenciales, establezca una política de protección.

Avertissement: Los datos que pueden no parecerle sensibles pueden serlo para sus usuarios, o simplemente no son datos que quieren o esperan filtrar silenciosamente el origen cruzado.

Utilisation de la référence de demande entrante : bonnes pratiques

Protection contre la falsification des demandes intersites (CSRF)

El uso de la referencia de las solicitudes entrantes para la protección CSRF tiene algunas dificultades:

  • Puede ocultarse con el aucun référent política, o falsificada por el emisor de la solicitud. Si no tiene control sobre la implementación del emisor de solicitudes, no puede hacer suposiciones sobre ningún encabezado que reciba.
  • Les Référent en-tête (et référent.document) puede contener más datos de los que necesitas, por ejemplo, una URL completa cuando solo desea saber si la solicitud es de origen cruzado.

Utiliser jetons CSRF
como su protección principal en su lugar. Para mayor protección, use SameSite, y en lugar de Référent, puede usar encabezados como
Origin (disponible en solicitudes POST y CORS) y
Sec-Fetch-Site (si está disponible).

Connexion

Les Référent en-tête (et référent.document) puede contener datos privados, personales o de identificación, por lo que debe tratarse como tal.

Y en lugar de Référent, considere usar otros encabezados que puedan abordar su caso de uso:
Origin y
Sec-Fetch-Site.

Paiements

Los proveedores de pago pueden confiar en Référent encabezado de las solicitudes entrantes de controles de seguridad.

Par exemple:

  • El usuario hace clic en un Acheter botón encendido online-shop.example/cart/checkout.
  • online-shop.example redirecciona a payment-provider.example para gestionar la transacción.
  • payment-provider.example comprueba el Référent de esta solicitud contra una lista de permitidos
    Référent valores establecidos por los comerciantes. Si no coincide con ninguna entrada de la lista,
    payment-provider.example rechaza la solicitud. Si coincide, el usuario puede continuar con la transacción.

Bonnes pratiques pour les contrôles de sécurité des flux de paiement

Resumen: como proveedor de pagos, puede utilizar el Référent como un control básico contra ataques ingenuos, pero definitivamente debe tener otro método de verificación más confiable en su lugar.

Les Référent El encabezado por sí solo no es una base confiable para una verificación: el sitio solicitante, ya sea un comerciante legítimo o no, puede establecer fácilmente un aucun référent política que hará que el Référent
información no disponible para el proveedor de pago. Sin embargo, como proveedor de pagos, mirando el
Référent puede ayudarlo a atrapar a atacantes ingenuos que no establecieron un aucun référent política. Entonces puede decidir usar el Référent como primer control básico. Si tu haces eso:

  • No esperes el Référent estar siempre presente; y si está presente, solo verifique con la pieza de datos que incluirá como mínimo: el origen. Al configurar la lista de permitidos
    Référent valores, asegúrese de que no se incluya ninguna ruta, sino solo el origen. Ejemplo: el permitido
    Référent valores para online-shop.example debiera ser online-shop.examplenon
    online-shop.example/cart/checkout. ¿Por qué? Porque al esperar o no Référent en absoluto o un
    Référent valor que es el origen del sitio web solicitante, evita errores inesperados ya que está no hacer suposiciones sobre el Référent-Politique su comerciante ha establecido o sobre el comportamiento del navegador si el comerciante no tiene una política establecida. Tanto el sitio como el navegador podrían quitar la Référent enviado en la solicitud entrante solo al origen o no enviar el Référent en absoluto.
  • Si il Référent está ausente o si está presente y su Référent la verificación de origen fue exitosa: puede pasar a su otro método de verificación más confiable (ver más abajo).

¿Cuál es un método de verificación más confiable?

Un método de verificación confiable es permitir que el solicitante hash los parámetros de la solicitud junto con una clave única. Como proveedor de pagos, puede calcula el mismo hash de tu lado y solo acepte la solicitud si coincide con su cálculo.

¿Qué pasa con el Référent ¿Cuándo un sitio de comerciante HTTP sin política de referencia redirecciona a un proveedor de pago HTTPS?

Pas Référent será visible en la solicitud para el proveedor de pago HTTPS, porque la mayoría de los navegadores utilizan origine-stricte-quand-origine-croisée ou
aucun-référent-lorsque-déclassement de forma predeterminada cuando un sitio web no tiene una política establecida. También tenga en cuenta que Cambio de Chrome a una nueva política predeterminada no cambiará este comportamiento.

conclusion

Una política de referencia protectora es una excelente manera de brindar a sus usuarios más privacidad.

Para obtener más información sobre las diferentes técnicas para proteger a sus usuarios, consulte la colección segura y protegida de web.dev.

Muchas gracias por las contribuciones y comentarios a todos los revisores, especialmente a Kaustubha Govind, David Van Cleve, Mike West, Sam Dutton, Rowan Merewood, Jxck y Kayce Basques.

Ressources

Erreur: Attention: Contenu protégé.