#safari #content-security-policy
#safari #политика безопасности содержимого
Вопрос:
У меня есть CSP с этой директивой script:
script-src 'sha256-0pXdwEz mZ/xD0qLLNDMVgeorh4Qr4Fv06RA35mAlk4='
и тег скрипта:
<script type="text/javascript" src="https://domain.xxx/frontframe.js" integrity="sha256-0pXdwEz mZ/xD0qLLNDMVgeorh4Qr4Fv06RA35mAlk4=" crossorigin="anonymous"></script>
Он работает в Chrome и Firefox, но не в safari, если я не изменю CSP на:
script-src 'self' 'sha256-0pXdwEz mZ/xD0qLLNDMVgeorh4Qr4Fv06RA35mAlk4='
Ошибка, которую я получаю без директивы ‘self’, является:
Refused to load https://domain.xxx/frontframe.js because it does not appear in script-src directive of the Content Security Policy.
Я делаю что-то не так или это одна из обычных причуд Safari? Моя цель — загружать скрипты только с допустимым значением sha256, а не с любым другим, которое директива ‘self’ дает возможность.
Ответ №1:
До уровня CSP 2.0 хэши применяются только к встроенным скриптам и стилям. Начиная с уровня CSP 3.0, также разрешено использовать хэши для внешних источников. См. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src . Safari, вероятно, менее совместим с CSP уровня 3.0.
Ответ №2:
Safari на iOS вообще не поддерживает SRI ( integrity=
атрибут). Поэтому Safari не поддерживает хэш-значение для разрешения внешних скриптов, поскольку оно основано на вышеуказанном атрибуте.
Обновление: Safari 12.1.1 поддерживает SRI, несмотря на информацию MDN.