Passer au contenu principal




Évitez les fuites d'informations CSRF, XSSI et d'origine croisée.


Mise à jour

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

¿Por qué debería preocuparse por aislar sus recursos la toile?

De nombreuses applications Web sont vulnérables aux attaques d'origine croisée telles que usurpation de requêtes intersites (CSRF), script intersite (XSSI), les attaques de temps, fuites d'informations d'origine croisée ou canal lateral de ejecución especulativa (Spectre) attaques.

Obtenir des métadonnées Les en-têtes de solicitud le permiten implementar un sólido mecanismo de defensa en profundidad, una política de aislamiento de recursos, para proteger su aplicación contra estos ataques comunes de origen cruzado.

Es común que los recursos expuestos por una determinada aplicación web solo los cargue la propia aplicación y no otros sitios web. En tales casos, la implementación de una política de aislamiento de recursos basada en los encabezados de solicitud de obtención de métadonnées requiere poco esfuerzo y, al mismo tiempo, protege la aplicación de ataques entre sitios.

Compatibilidad del le navigateur

Los encabezados de solicitud de obtención de metadatos se admiten a partir de Chrome 76 y en otros navigateurs basados ​​en Chromium, y están en desarrollo en Firefox. Ver Compatibilité du navigateur pour obtenir des informations à jour sur la compatibilité des navigateurs.

Antécédents

Muchos ataques entre sitios son posibles porque la web está abierta de forma predeterminada y su serveur de aplicaciones no puede protegerse fácilmente de la comunicación que se origina en aplicaciones externas. Un ataque típico de origen cruzado es la falsificación de solicitudes entre sitios (CSRF), en la que un atacante atrae a un Nom d'utilisateur a un sitio que controla y luego envía un formulario al servidor en el que el usuario está conectado. Dado que el servidor no puede saber si la solicitud se originó en otro domaine (entre sitios) y el navegador adjunta automáticamente cookies a las solicitudes entre sitios, el servidor ejecutará la acción solicitada por el atacante en nombre del usuario.

Otros ataques entre sitios, como la inclusión de scripts entre sitios (XSSI) o las fugas de información de origen cruzado, son de naturaleza similar a CSRF y dependen de la carga de recursos de una aplicación de la víctima en un documento controlado por el atacante y de la filtración de información sobre las aplicaciones de la víctima. Dado que las aplicaciones no pueden distinguir fácilmente las solicitudes confiables de las no confiables, no pueden descartar el circulation malicioso entre sitios.

Gotchas!

Outre les attaques de ressources décrites ci-dessus, références de fenêtre cela peut également conduire à des fuites d'informations d'origine croisée et à des attaques Spectre. Vous pouvez les empêcher en réglant le Politique d'ouverture des origines croisées en-tête de réponse à même origine.

Présentation de Fetch Metadata

Los encabezados de solicitud de Fetch Metadata son una nueva característica de seguridad de la plataforma web diseñada para ayudar a los servidores a defenderse contra ataques de origen cruzado. Al proporcionar información sobre el contexto de una solicitud HTTP en un conjunto de Sec-Fetch- * en-têtes, permettent au serveur répondant d'appliquer des politiques de sécurité avant de traiter la demande. Cela permet aux développeurs de décider d'accepter ou de rejeter une demande en fonction de la manière dont elle a été faite et du contexte dans lequel elle sera utilisée, leur permettant de répondre uniquement aux demandes légitimes faites par leur propre application.

Même origine

Les demandes provenant de sites servis par votre propre serveur (même origine) continueront de fonctionner.

même-origine-demande-1058575

Intersite

Le serveur peut rejeter les demandes intersites malveillantes en raison du contexte supplémentaire dans la demande HTTP fournie par Sec-Fetch- * en-têtes.

cross-origin-request-7423869

Sec-Fetch-Site

Sec-Fetch-Site indique au serveur quel site a envoyé la demande. Le navigateur définit cette valeur sur l'une des valeurs suivantes:

  • même origine, si la demande a été faite par votre propre application (par exemple. site.example)
  • même site, si la solicitud fue realizada por un sous-domaine de su sitio (p. ej. bar.site.example)
  • rien, si la solicitud fue causada explícitamente por la interacción de un usuario con el agent utilisateur (por ejemplo, al hacer clic en un marcador)
  • intersite, si la demande a été soumise par un autre site Web (par exemple. mal.exemple)

Mode Sec-Fetch

Mode Sec-Fetch indique le mode de la demande. Cela correspond à peu près au type de requête et vous permet de distinguer les charges de ressources des requêtes de navigation. Par exemple, une destination de naviguer indique une demande de navigation de niveau supérieur pendant que pas de cors indique des demandes de ressources telles que le téléchargement d'une image.

Sec-Fetch-Dest

Sec-Fetch-Dest Soumettre une demande destination (par exemple, si un scénario ou un img a amené le navigateur à demander une ressource).

Les informations supplémentaires fournies par ces en-têtes de demande sont assez simples, mais le contexte supplémentaire vous permet de créer une puissante logique de sécurité côté serveur, également connue sous le nom de stratégie d'isolation des ressources, avec seulement quelques lignes de code.

Mettre en œuvre une politique d'isolation des ressources

Une stratégie d'isolation des ressources empêche vos ressources d'être demandées par des sites Web externes. Le blocage de ce trafic atténue les vulnérabilités Web intersites courantes telles que CSRF, XSSI, les attaques de synchronisation et les fuites d'informations entre origines. Cette politique peut être activée pour tous les points de terminaison de votre application et permettra toutes les demandes de ressources provenant de votre propre application, ainsi que la navigation directe (via un HTTP OBTENIR demander). Les points de terminaison censés être chargés dans un contexte intersite (par exemple, les points de terminaison chargés à l'aide de CORS) peuvent être exclus de cette logique.

Étape 1: autoriser les demandes des navigateurs qui n'envoient pas de récupération de métadonnées

Étant donné que tous les navigateurs ne prennent pas en charge la récupération des métadonnées, vous devez autoriser les demandes qui ne sont pas définies Sec-Fetch- * en-têtes vérifiant la présence de sec-fetch-site.

Tous les exemples suivants sont du code python.

si not req['sec-fetch-site']:
revenir True

Mise en garde:
Étant donné que la récupération des métadonnées n'est prise en charge que par les navigateurs modernes, elle doit être utilisée comme protection de défense en profondeur et non comme votre principale ligne de défense.

Étape 2: Autoriser les demandes lancées sur le même site et dans le navigateur

Toute demande qui ne provient pas d'un contexte inter-origine (tel que mal.exemple) sera autorisé. En particulier, ce sont des demandes qui:

  • Il provient de votre propre application (par exemple, une requête de la même origine où site.example demandes site.example / foo.json sera toujours autorisé).
  • Cela vient de vos sous-domaines.
  • Ils sont explicitement causés par l'interaction d'un utilisateur avec l'agent utilisateur (par exemple, navigation directe ou clic sur un signet, etc.).

si req['sec-fetch-site'] dans ('same-origin', 'same-site', 'none'):
revenir True

Gotchas!

En caso de que sus subdominios no sean completamente confiables, puede hacer que la política être más estricta bloqueando las solicitudes de los subdominios eliminando el même site valeur.

Étape 3: activez l'iframing et la navigation simples de niveau supérieur

Pour vous assurer que votre site peut toujours être lié à partir d'autres sites, vous devez autoriser simple (HTTP GET) navigation de haut niveau.

si req['sec-fetch-mode'] == 'naviguer' et req.méthode == 'GET'
et req['sec-fetch-dest'] not dans ('object', 'embed'):
revenir True

Gotchas!

La logique ci-dessus empêche vos points de terminaison d'application d'être utilisés comme ressources par d'autres sites Web, mais permettra une navigation et une intégration de haut niveau (par exemple, le téléchargement vers un <iframe>). Para mejorar aún más la seguridad, puede usar los encabezados de Obtener metadatos para restringir la navegación entre sitios a solo un conjunto permitido de páginas.

Étape 4: désactivez les points de terminaison destinés à servir le trafic intersite (facultatif)

Dans certains cas, votre application peut fournir des ressources qui doivent être chargées entre les sites. Ces ressources doivent être exemptées par chemin ou par point de terminaison. Des exemples de ces points de terminaison sont:

  • Points de terminaison destinés à un accès entre origines: si votre application fournit des points de terminaison CORS activé, vous devez les exclure explicitement de l'isolation des ressources pour garantir que les requêtes intersites vers ces points de terminaison sont toujours possibles.
  • Ressources publiques (par exemple, images, styles, etc.): toutes les ressources publiques et non authentifiées qui doivent être chargeables entre origines à partir d'autres sites peuvent également être exemptées.

si req.path dans ('/my_CORS_endpoint', '/favicon.png'):
revenir True

Mise en garde:
Avant d'exclure des parties de votre application de ces restrictions de sécurité, assurez-vous qu'elles sont statiques et qu'elles ne contiennent pas d'informations utilisateur sensibles.

Étape 5: refuser toutes les autres demandes intersites et non-navigation

Autres intersite La demande sera rejetée par cette politique d'isolation des ressources et protégera ainsi votre application contre les attaques intersites courantes.

Gotchas!

Par défaut, les demandes qui ne respectent pas vos règles doivent être rejetées avec un HTTP 403 répondre. Mais en fonction de votre cas d'utilisation, vous pouvez également envisager d'autres actions, telles que:

  • Journalisation des violations. Ceci est particulièrement utile lors du test de la politique de compatibilité et de la recherche des points de terminaison qui peuvent devoir être contournés.
  • Modifier la demande. En ciertos escenarios, considere realizar otras acciones como redirigir a su página de destino y eliminar las credenciales de autenticación (por ejemplo, cookies). Sin embargo, tenga en cuenta que esto podría debilitar las protecciones de una política basada en Obtener metadatos.

Exemple: El siguiente código demuestra una implementación completa de una política sólida de aislamiento de recursos en el servidor o como un Logiciel intermedio para denegar solicitudes de recursos entre sitios potencialmente maliciosos, al tiempo que permite solicitudes de navegación simples:


def allow_request(req):
if not req['sec-fetch-site']:
return True


if req['sec-fetch-site'] in ('same-origin', 'same-site', 'none'):
return True


if req['sec-fetch-mode'] == 'navigate' and req.method == 'GET'
and req['sec-fetch-dest'] not in ('object', 'embed'):
return True


if req.path in ('/my_CORS_endpoint', '/favicon.png'):
return True


return False

Mettre en œuvre une politique d'isolation des ressources

  1. Installez un module comme l'extrait de code ci-dessus pour enregistrer et surveiller le comportement de votre site et vous assurer que les restrictions n'affectent pas le trafic légitime.
  2. Corrigez les violations potentielles en exemptant les points de terminaison d'origine croisée légitimes.
  3. Appliquez la stratégie en rejetant les demandes non conformes.

Identifier et corriger les violations de politique

Il est recommandé de tester votre stratégie sans effets secondaires en l'activant d'abord en mode de rapport dans votre code côté serveur. Vous pouvez également implémenter cette logique dans un middleware ou un proxy inverse qui enregistre toutes les violations que votre stratégie pourrait provoquer lorsqu'elle est appliquée au trafic de production.

A partir de nuestra experiencia en la implementación de una Política de aislamiento de recursos de búsqueda de metadatos en Google, la mayoría de las aplicaciones son compatibles de forma predeterminada con dicha política y rara vez requieren la exención de extremos para permitir el tráfico entre sitios.

Application d'une stratégie d'isolation des ressources

Une fois que vous avez vérifié que votre politique n'affecte pas le trafic de production légitime, vous êtes prêt à appliquer les restrictions, en vous assurant que les autres sites ne pourront pas demander vos ressources et en protégeant vos utilisateurs contre les attaques intersites.

Mise en garde:
Assurez-vous de rejeter les demandes non valides avant d'exécuter des contrôles d'authentification ou tout autre traitement de demande pour éviter de révéler des informations sensibles au temps.

Autres lectures