Хэш политики безопасности содержимого, не распознанный Safari 13.1.2

#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.