Проблема
Content-Security-Policy по умолчанию должен заносить в черный список скрипт и стиль синтаксического анализа и разрешать его на основе различных инструкций, одна из которых проверяет хэш ожидаемого результата. Браузер не должен реализовывать какой-либо Javascript или CSS, которому заранее не был присвоен соответствующий хэш. Код с совпадающим хешем должен выполняться как обычно. Microsoft Edge отказывается от всех внутристраничных блоков JS / CSS.
Инструкции. Перейдите по приведенной ниже ссылке для демонстрации в Microsoft Edge, а также в любом другом браузере.
Живая демонстрация: http://output.jsbin.com/biqidoqebu
Демонстрация оригинального исходного кода
<!doctype html>
<html>
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; style-src 'sha256-JtUhvM7uQO2KX5IEGWxN+rhEyzzsyFelfO2gXvYEuWA='; script-src https://ajax.googleapis.com 'sha256-iZzrsbzuGxfOaTdnB/E6RQBssyXQRp7W8YtZD2Wg/Rc=';" />
<meta http-equiv="X-Content-Security-Policy" content="default-src 'self'; style-src 'sha256-JtUhvM7uQO2KX5IEGWxN+rhEyzzsyFelfO2gXvYEuWA='; script-src https://ajax.googleapis.com 'sha256-iZzrsbzuGxfOaTdnB/E6RQBssyXQRp7W8YtZD2Wg/Rc=';" />
<style>#loading{color:transparent}#loading:after{color:green;content:"Style loaded."}</style>
</head>
<body>
<span id="loading">Hashes loading...</span>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
<script>alert("Script loaded.")</script>
- Ожидаемое поведение: тело должно измениться на «Стиль загружен.», в окне предупреждения должно быть указано «Сценарий загружен.», внешний Javascript не должен выдавать ошибку. Консоль не показывает проблем.
- Фактическое поведение: тело зависает при "Загрузка хэшей ...". Хэши отклонены, внешний Javascript принят. Консоль показывает ошибки:
CSP14304: Unknown source ‘'sha256-JtUhvM7uQO2KX5IEGWxN+rhEyzzsyFelfO2gXvYEuWA='’ for directive ‘style-src’ in - source will be ignored.
CSP14306: No sources given for directive ‘style-src’ for - this is equivalent to using ‘none’ and will prevent the downloading of all resources of this type.
CSP14304: Unknown source ‘'sha256-iZzrsbzuGxfOaTdnB/E6RQBssyXQRp7W8YtZD2Wg/Rc='’ for directive ‘script-src’ in - source will be ignored.
CSP14312: Resource violated directive ‘style-src 'sha256-JtUhvM7uQO2KX5IEGWxN+rhEyzzsyFelfO2gXvYEuWA='’ in : inline style. Resource will be blocked.
CSP14312: Resource violated directive ‘script-src LINK-REMOVED-INSUFFICIENT-REPUTATION-ON-STACKOVERFLOW-SHOULD-BE-THE-GOOGLE-API-URL 'sha256-iZzrsbzuGxfOaTdnB/E6RQBssyXQRp7W8YtZD2Wg/Rc='’ in : inline script. Resource will be blocked.
Попытки исправить
- Проверка правильности хэшей: дважды проверенное вычисление было двоичным, вот и все. Делать особо нечего, их принимают другие браузеры.
- Изменены значения
default-src
иconnect-src
наself
, а неnone
Я не могу придумать, что еще попробовать.
Обновление через 24 часа: добавлен X-Content-Security-Policy для полноты и обновлен URL-адрес JSBin, хотя это не имеет значения для данной конкретной ситуации.
style-src self 'sha256-JtUhvM7uQO2KX5IEGWxN+rhEyzzsyFelfO2gXvYEuWA='
илиstyle-src URL_OF_YOUR_PAGE 'sha256-JtUhvM7uQO2KX5IEGWxN+rhEyzzsyFelfO2gXvYEuWA='
? - person ben   schedule 30.07.2015