web-dev-qa-db-fra.com

Qu'est-ce que CSP nous protège si nous autorisons les opérations non sécurisées?

Actuellement, je définis la politique de sécurité du contenu (CSP) comme ci-dessous;

Header set Content-Security-Policy: "default-src 'self' data:; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:;"

Compte tenu de la définition ci-dessus du CSP, le JavaScript en ligne me pose problème, car il peut être écrasé à tout moment.

Quelle est l'utilisation de unsafe-inline si cela ne protège pratiquement pas?

25
Zernel

L’option unsafe-inline Doit être utilisée lorsque le déplacement ou la réécriture de code en ligne sur votre site actuel n’est pas une option immédiate, mais vous souhaitez toujours utiliser CSP pour contrôler d’autres aspects (tels que object-src, empêchant l’injection de tiers). fête js etc.). Vous avez raison de dire que unsafe-inline N'offre pas beaucoup de sécurité car il permet l'exécution de scripts et de gestionnaires d'événements non sécurisés dans la page.

L'évaluateur CSP de Google est un outil astucieux pour déterminer si votre stratégie est solide.

Un cas d'utilisation de l'option unsafe-inline Est disponible dans la documentation de Google Web Developer sur la politique de sécurité du contenu :

Un administrateur du forum de discussion de mariage souhaite s'assurer que toutes les ressources ne sont chargées que via des canaux sécurisés, mais n'écrit pas beaucoup de code; la réécriture de gros morceaux du logiciel de forum tiers qui regorge de scripts en ligne et de style dépasse ses capacités. La politique suivante serait efficace:

Content-Security-Policy: default-src https:; script-src https: 'unsafe-inline'; style-src https: 'unsafe-inline'

Même si https: Est spécifié dans default-src, Les directives de script et de style n'héritent pas automatiquement de cette source. Chaque directive écrase complètement la valeur par défaut pour ce type de ressource spécifique.

25
Anand Bhat

Bien que je convienne que cela ne protège pas beaucoup, l’exploitation classique de XSS est le framework d’exploitation de navigateur, où vous avez un serveur sur Internet, et quand vous avez un trou XSS, vous tombez sur "http://bad.example.com" /hook.js "> et vous pouvez maintenant contrôler le navigateur de la victime à partir de ce serveur. Vous lui dites d'ouvrir une fenêtre cachée pour un accès persistant, puis vous avez des communications bidirectionnelles vers leur navigateur.

Un CSP avec "unsafe-inline" autorise potentiellement la même exploitation (en supposant que les exploits tiennent dans l'espace que vous pouvez injecter), mais il est légèrement plus difficile de se connecter au monde extérieur pour recevoir des instructions ou pour exfiltrer des données.

Cela dit, je pense qu'il est toujours possible de faire la plupart des mêmes attaques via d'autres canaux si vous pouvez injecter une partie client assez sophistiquée dans une page Web.

Avec mon chapeau d'attaquant sur "self unsafe-inline", c'est plus difficile à exploiter que pas de CSP du tout. Je m'attends à ce que les outils d'attaque s'adaptent aux CSP faibles, mais cela signifiera que de nombreux exploits courants sont immédiatement ou plus difficiles à obtenir.

11
Simon