web-dev-qa-db-fra.com

Quelle est la différence entre CORS et CSP?

De mon point de vue, les technologies appelées Partage des ressources d'origine croisée (CORS) et Stratégies de sécurité du contenu (CSP) semblent être très similaires dans leur objectif et leur mise en œuvre.

Les deux semblent vous permettre de mettre en liste blanche les origines des ressources qu'une version sans compromis de votre page Web incorpore, via des en-têtes de réponse HTTP. La seule différence que je peux voir est que les CSP semblent être plus précis dans ce que vous pouvez approuver dans votre réponse HTTP.

47
nickform

CORS permet d'assouplir la même politique d'origine pour un domaine.

par exemple. normalement si l'utilisateur se connecte aux deux example.com et example.org, la même politique d'origine empêche example.com de faire une AJAX à example.org/current_user/full_user_details et accéder à la réponse.

Il s'agit de la politique par défaut du Web et empêche la fuite des données de l'utilisateur lorsqu'il est connecté à plusieurs sites en même temps.

Maintenant avec CORS, example.org pourrait définir une politique pour dire qu'il autorisera l'origine https://example.com pour lire les réponses faites par AJAX. Cela serait fait si les deux example.com et example.org sont gérés par la même entreprise et le partage de données entre les origines doit être autorisé dans le navigateur de l'utilisateur. Cela n'affecte que le côté client des choses, pas le côté serveur.

Les CSP, d'autre part, définissent une politique sur le contenu pouvant être exécuté sur le site actuel. Par exemple, si JavaScript peut être exécuté en ligne, ou quels domaines .js les fichiers peuvent être chargés à partir de. Cela peut être utile pour agir comme une autre ligne de défense contre les attaques XSS , où l'attaquant tentera d'injecter un script dans la page HTML. Normalement la sortie serait encodée , cependant, dites que le développeur n'a oublié qu'un seul champ de sortie. Étant donné que la stratégie empêche l'exécution du script en ligne, l'attaque est contrecarrée.

57
SilverlightFox

CORS autorise un site A à autoriser le site B à lire les données (potentiellement privées) du site A (à l'aide du navigateur et des informations d'identification du visiteur).

CSP permet à un site d'empêcher lui-même de charger du contenu (potentiellement malveillant) à partir de sources inattendues (par exemple comme défense contre XSS).

42
Quentin

Aucune des réponses ci-dessus ne donne une différence claire et concise entre CSP et CORS. Voici ma façon de penser à leur sujet:

Disons que nous avons abc.com site Web qui souhaite envoyer une demande à def.net.

  1. Lorsque l'utilisateur visite abc.com dans le navigateur, le serveur abc.com renvoie réponse HTTP abc.com, la restriction CSP dans cette réponse peut empêcher abc.com dans le navigateur d'émettre une demande à def.net.
  2. S'il n'y a pas de restriction CSP dans réponse HTTP abc.com, alors abc.com dans le navigateur peut envoyer une demande à def.net.
  3. Lors de la réception de la demande, le serveur def.net répond avec réponse HTTP def.net, la restriction CORS dans cette réponse peut empêcher abc.com dans le navigateur de la charger. (Notez que par défaut, la politique de même origine limitera la réponse du chargement, sauf indication contraire de CORS)

CSP protège donc abc.com et la politique de même origine (le manque de CORS) protège def.net dans l'exemple ci-dessus.

16
paradite

CORS vérifie auprès du tiers l'autorisation d'utiliser ses services. Ainsi, le tiers fournit ou refuse l'autorisation.

Ainsi, par exemple, si une page de www.example.com doit faire une demande à www.example.org, nous devons envoyer une demande OPTIONS envoyée à www.example.org avec Origin: www.example.com comme précurseur de la demande pour autorisation. Maintenant, www.example.org fournit ou refuse l'autorisation.

CSP empêche une page Web de charger par inadvertance du contenu malveillant d'un tiers en spécifiant d'où un type particulier de contenu peut être chargé. Ainsi, par exemple, vous pouvez fournir une source valide pour chacun des scripts, css, médias, etc. suivants en utilisant des directives

Exemple:

Content-Security-Policy: default-src 'none'; script-src 'self' www.google-analytics.com ajax.googleapis.com; connect-src 'self'; img-src 'self'; style-src 'self';

2
sbdh shvpj