Обработка ошибки загрузки в рамках проверки целостности подресурса
Я реализую проверки целостности подресурсов. Я хотел бы реализовать такой запасной вариант, чтобы 1) браузеры загружались из моего CDN, выполняли проверку целостности и продолжали или 2) в случае сбоя проверки целостности встроенный сценарий запускает и извлекает необходимый сценарий из моего приложения сервер (ресурс под моим контролем).
У меня есть простой javascript, который перехватывает события window.onerror, но скрипт фактически обнаруживает неперехваченное ReferenceError (моя страница ссылается на скрипт во внешнем ресурсе), а не ошибку браузера "Не удалось найти правильный дайджест...".
Кто-нибудь нашел способ обнаружить, что проверка целостности не удалась, а затем использовать javascript для извлечения стороннего размещенного ресурса из более надежного расположения?
2 ответа
Взгляните на эту реализацию SRI-отступления:
Вы можете проверить наличие загруженного ресурса и загрузить резервную локальную копию:
<script src="https://code.jquery.com/jquery-1.12.0.min.js" integrity="sha256-Xxq2X+KtazgaGuA2cWR1v3jJsuMJUozyIXDB3e793L8=" crossorigin="anonymous"></script>
<script>
if (!window.jQuery) {
var script = document.createElement('script');
script.src = '/local-resources/js/jquery-1.12.0.min.js';
script.async = false;
document.head.appendChild(script);
}
</script>
Вы должны поймать ошибку и сделать все необходимое.
- Создать и прикрепить MutationObserver
- добавить обратный звонок
- поймай ошибку и действуй соответственно
Посмотрите на оба примера ниже. Займи все, что полезно. Отправить большое спасибо авторам;-)
Здесь вы можете найти пример https://github.com/cyph/sri-fallback/blob/master/sri-fallback.js
Еще одно очень хорошее чтение доступно здесь https://aldaris.github.io/dev/security/2018/03/05/subresource-integrity.html
PS: window.onerror, вероятно, не лучший подход для вас, может привести к большему количеству ошибок, чем ожидалось, и привести ко многим условиям...