web-dev-qa-db-fra.com

Pourquoi Chrome ne respecte-t-il pas les hachages de ma politique de sécurité du contenu?

Je dois ajouter CSP à une page qui a des styles en ligne et pour éviter d'utiliser unsafe-inline J'utilise des hachages. Ma technique pour ajouter les hachages consiste simplement à charger la page dans Chrome, à voir les messages d'erreur et à copier tous les hachages suggérés (par exemple, prendre <suggested hash> À partir de Refused to apply inline style because it violates the following Content Security Policy directive: "style-src ...". Either the 'unsafe-inline' keyword, a hash ('<suggested hash>'), or... is required to enable inline execution.).

Cela a résolu le problème dans Firefox, mais pas dans Chrome. Curieusement, Chrome ne semble pas respecter les hachages qu'il a lui-même généré. Cela conduit à une situation amusante où Chrome répertorie la politique, y compris le hachage) , dit qu'il n'est pas conforme, puis recommande que j'ajoute un hachage qui était dans la politique qu'il a imprimée juste avant.

Ma politique:

default-src 'none'; font-src 'self' data:; img-src 'self'; script-src 'self' 'report-sample'; style-src 'self' 'sha256-/3kWSXHts8LrwfemLzY9W0tOv5I4eLIhrf0pT8cU0WI=' 'sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=' 'sha256-OTeu7NEHDo6qutIWo0F2TmYrDhsKWCzrUgGoxxHGJ8o=' 'sha256-fviu5RwuBYFcCd5CDanhy6NCLufcwvCAbm061aSqhoQ=' 'sha256-wS7xf+bhXBr5EM064hQkAW0vX3ks5VoxbGn+KQC/Vhk=' 'sha256-cxL35Ug49Sl1zHMOdz/r0xinQ6BYGgClHdDCk2XPTzE='; object-src 'self'; connect-src 'self'

Il en résulte de nombreuses erreurs telles que:

Refused to apply inline style because it violates the following Content Security Policy directive: "style-src 'self' 'sha256-/3kWSXHts8LrwfemLzY9W0tOv5I4eLIhrf0pT8cU0WI=' 'sha256-47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU=' 'sha256-OTeu7NEHDo6qutIWo0F2TmYrDhsKWCzrUgGoxxHGJ8o=' 'sha256-fviu5RwuBYFcCd5CDanhy6NCLufcwvCAbm061aSqhoQ=' 'sha256-wS7xf+bhXBr5EM064hQkAW0vX3ks5VoxbGn+KQC/Vhk=' 'sha256-cxL35Ug49Sl1zHMOdz/r0xinQ6BYGgClHdDCk2XPTzE='". Either the 'unsafe-inline' keyword, a hash ('sha256-/3kWSXHts8LrwfemLzY9W0tOv5I4eLIhrf0pT8cU0WI='), or a nonce ('nonce-...') is required to enable inline execution. où Chrome recommande que j'ajoute un hachage qui est déjà présent dans la politique.

Il me manque probablement un problème spécifique à Chrome. Des idées ce que cela pourrait être?

14
Jansky

Je suppose que vous avez vos styles intégrés dans les attributs de style (par opposition à _ <style> éléments). Selon la spécification CSP , les hachages doivent s'appliquer à la ligne <style> uniquement les éléments, pas les attributs de style.

Alors que Chrome affiche un message d'erreur très déroutant pour les attributs de style, il est en fait conforme à la spécification (certains autres navigateurs, par exemple Firefox et IE ne le font pas) . Vous ne pouvez pas autoriser les attributs de style en ligne à l'aide de codes de hachage dans CSP dans Chrome. Si vous devez absolument les autoriser, vous devez utiliser 'unsafe-inline'.

La spécification CSP 3.0 inclura probablement la possibilité d'étendre les codes de hachage aux attributs de style en utilisant ['unsafe-hashed-attributes'][2]. Cette fonctionnalité est toujours dans un état de "travail en cours" pour le moment et ne semble pas encore être implémentée dans Chrome.

Exemple:

<?php
header("Content-Security-Policy: style-src 'self' 'sha256-U/AHSCAVB2ZhU2+kPeMhPfZyIE2wH4fhQ0ZtYjq9/JA=' 'sha256-l8V8xXSfpuv7xbN4e0tIS0v77DG2xfSC1rSpNZak/K8='");
header("Content-Type: text/html");
?>

<!DOCTYPE html>
<html>
  <head>
    <!-- Inline style - 'sha256-U/AHSCAVB2ZhU2+kPeMhPfZyIE2wH4fhQ0ZtYjq9/JA=' -->
    <style>.redtext {color: red;}</style>
  </head>

  <body>
    <div class="redtext">This should be red - style from &lt;style&gt; element.</div>
    <!-- Inline style in attribute - 'sha256-l8V8xXSfpuv7xbN4e0tIS0v77DG2xfSC1rSpNZak/K8=' -->
    <div style = "color: green;">This should not be green - style from attribute should be disallowed even though its hash is included in style-src in CSP.</div>
  </body>
</html>
9
Petr Srníček