Если на сайте есть заголовок ‘HTTP Content-Security-Policy require-sri-for’, охватывает ли это все вложенные скрипты?

Вопрос или проблема

Если я использую целостность подресурсов (SRI) на веб-странице, и скрипт, который я импортирую, затем импортирует еще один скрипт, будет ли CSP ‘require-sri-for’ также включать эти последующие, вложенные, импортированные скрипты?

Например, если .js файл загружается главной веб-страницей и включает ссылку на другой .js файл, хэш верхнего уровня файла не изменится, если URL этого другого .js файла не изменится, но код по этому URL изменился. Таким образом, файл верхнего уровня пройдет проверку SRI, хотя этот скрипт затем подтягивает непроверенный скрипт.

Или проверка CSP ‘require-sri-for’ наследуется скриптами, которые затем загружаются, продолжая цепочку импорта (если такая существует)?

Нет, это не значит этого. Этот заголовок сообщает браузеру о необходимости выполнять проверку SRI для каждого отдельного скрипта на странице.

Если вы используете:

Content-Security-Policy: require-sri-for script

Вы должны добавить атрибут целостности для каждого используемого вами скрипта:

<script src="https://some.code.com/example1.js"
    integrity="sha256-5i/mQ...yXWA="></script>

<script src="https://some.code.com/example2.js"></script>

Таким образом, если вы не используете атрибут integrity для какого-либо скрипта, он не загрузится. Поэтому example2.js выше не будет загружен.

Ответ или решение

Заголовок HTTP Content-Security-Policy с директивой require-sri-for устанавливает обязательное использование механизма Subresource Integrity (SRI) для скриптов, загружаемых с вашего веб-сайта. Однако важно отметить, что данная директива не распространяется на вложенные или подгружаемые скрипты, которые могут быть подключены другими скриптами.

Когда вы используете следующие настройки CSP:

Content-Security-Policy: require-sri-for script

это означает, что все скрипты, которые вы непосредственно добавляете на вашу страницу, должны содержать атрибут integrity. Например:

<script src="https://some.code.com/example1.js"
    integrity="sha256-5i/mQ...yXWA="></script>

<script src="https://some.code.com/example2.js"></script>

В данном случае первый скрипт example1.js будет загружен только в том случае, если проверка SRI пройдется успешно, то есть хэш, указанный в атрибуте integrity, должен совпадать с фактическим хэшем загружаемого ресурса. Однако для второго скрипта example2.js, который не имеет атрибута integrity, загрузка не произойдет, поскольку отсутствует необходимая проверка целостности.

Что касается вложенных скриптов, то, если example1.js загружает другой скрипт, даже если второй скрипт изменился и не отвечает требованиям SRI, браузер не будет проводить проверку на него, так как контроль SRI применяется только к исходным скриптам, загруженным напрямую с страницы. Таким образом, если у вас есть структура зависимостей, где один скрипт загружает другие скрипты, то необходимо быть особенно внимательным, чтобы все скрипты, которые будут потенциально загружены, также имели атрибут integrity.

Итак, чтобы гарантировать безопасность вашего приложения и защититься от возможных атак, важно обеспечить использование SRI для всех скриптов, которые могут загружаться, независимо от того, являются ли они первичными или вложенными. Если вы не контролируете содержимое вторичных скриптов, то лучше всего избегать их использования или обеспечить, чтобы они также имели атрибут integrity.

Оцените материал
Добавить комментарий

Капча загружается...