Я пытаюсь понять, почему я получаю отчет о политике безопасности контента о нарушении connect-src
только от Chrome (не Firefox) для случая, когда Javascript выполняет что-то вроде:
somediv.innerHTML = "...<img src='https://thirdpartysite/someimage.jpg'>..."
в обработчике window.onbeforeunload
.
Я сделал небольшую демонстрацию проблемы здесь: https://testcsp.savesnine.info/. Это присваивает некоторый HTML элементу img
со сторонним src
в обработчике window.onload
(таким образом, изображение отображается при загрузке страницы) и в window.onbeforeunload
. Назначение onload
не запускает CSP, но onbeforeunload
делает.
Оно также запускается на connect-src
, а не img-src
(я установил img-src
для разрешения сторонних изображений, но не connect-src
, и я не верю, что мне это нужно, и в любом случае это победит). Вы можете увидеть заголовок CSP и отчет CSP, запускаемый из отладчика Chrome (когда вы go переходите на другую веб-страницу - для этого требуется Preserve Log, чтобы консоль увидела его, или в сети для отправки отчета в /csp.php
). Заголовок CSP:
default-src 'self';style-src 'self';img-src 'self' https:;script-src 'self';connect-src 'self';font-src chrome-extension: moz-extension: safari-extension: data:;report-uri /csp.php
Это искусственный пример, но настоящая проблема возникла из-за трудно диагностируемого отчета CSP, который, казалось, произошел через несколько минут после того, как люди закончили работу в Интернете. страница, на которой это произошло (согласно моим файлам журнала). В конце концов я понял, что он прибыл из редактора tinymce, когда они закрывали страницу браузера (или уходили в другое место), который устанавливает обработчик onbeforeunload для записи HTML, который он редактировал (содержит сторонние изображения, но допускается * 1031). *) обратно в исходный элемент контейнера, откуда пришло содержимое.
Я думаю, что у меня есть правильный CSP для моего случая здесь, так что это может быть ошибка Chrome, но в равной степени я мог неправильно понять что-то о CSP .