Почему Chrome не уважает мои хэши Политики безопасности контента? - PullRequest
0 голосов
/ 09 октября 2018

Мне нужно добавить CSP на страницу со встроенными стилями, и чтобы избежать использования unsafe-inline Я использую хэши.Моя техника добавления хэшей - просто загрузить страницу в Chrome, просмотреть сообщения об ошибках и скопировать все предложенные хэши (например, взять <suggested hash> из 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.).

Это исправило проблему в Firefox,но не в хроме.Как ни странно, Chrome, похоже, не учитывает хеши, которые он сам сгенерировал.Это приводит к забавной ситуации, когда Chrome перечисляет политику, включая хэш, говорит, что она не соответствует, а затем рекомендует добавить хэш, который был в напечатанной им политике.

Моя политика:

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'

Это приводит к многочисленным ошибкам, таким как:

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., в которых Chrome рекомендует добавить хэш, который уже присутствует в политике.

Вероятно, есть какая-то специфическая для Chrome ошибка, по которой я скучаю.Есть идеи, что это может быть?

1 Ответ

0 голосов
/ 13 октября 2018

Я предполагаю, что у вас есть встроенные стили в атрибутах стиля (в отличие от встроенных <style> элементов).Согласно спецификации CSP , хэши должны применяться только к встроенным элементам <style>, а не к атрибутам стиля.

Хотя Chrome отображает очень запутанное сообщение об ошибке для атрибутов стиля, он фактически соответствуетспецификация (некоторые другие браузеры, например Firefox и IE этого не делают).Вы не можете разрешить встроенные атрибуты стиля, используя хэш-коды в CSP в Chrome.Если вам абсолютно необходимо разрешить их, вы должны использовать 'unsafe-inline'.

Спецификация CSP 3.0, вероятно, будет включать возможность расширять хэш-коды для атрибутов стиля с помощью ['unsafe-hashed-attributes'][2].Эта функциональность все еще находится в состоянии «в процессе», хотя и, похоже, еще не реализована в Chrome.

Пример:

<?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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...