Как использовать Dynami c nonce в ASP. NET MVC 4 для CSP - PullRequest
4 голосов
/ 06 февраля 2020

У меня MVC приложение, разработанное в ASP. NET MVC 4. Я использую JavaScript на нескольких страницах. Некоторые из javascripts упоминаются как

@Scripts.Render("~/Scripts/bootstrap")
@Scripts.Render("~/Scripts/js")

, а также есть некоторые встроенные сценарии, такие как

<script type="javascript">

   // javascript code
</script>

Я хочу реализовать Политику безопасности контента для этого сайта. Сайт размещен в IIS. Поэтому в IIS я добавляю заголовок политики безопасности содержимого в заголовок ответа HTTP как

object-src 'none';
 script-src 'nonce-{random}' 'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:;
 base-uri 'self';
 report-uri https://csp.withgoogle.com/csp/<unique_id>/<application_version>

Таким образом, каждый ответ будет включать этот заголовок.

Вопросы:

  1. Как добавить случайно сгенерированный одноразовый номер в теги сценария и, что важно, как IIS будет знать случайно сгенерированное значение одноразового номера, чтобы его можно было включить в заголовок ответа? (Я предполагаю, что каждый ответ будет иметь уникальное значение nonce)

1 Ответ

0 голосов
/ 06 февраля 2020

Вставка одноразовых тегов и особенно их соответствие в CSP часто бывает сложно. Если ваш код скрипта stati c и не содержит ничего, что изменяет, было бы намного проще занести их в белый список на основе их ha sh. Если вы удалите «unsafe-inline», многие браузеры сообщат вам, какие хэши необходимо добавить.

И обратите внимание, что ваш script-sr c, включая https: и http:, позволит ему загружать ЛЮБОЙ скрипт по http и https. Если ваша страница обслуживается через https, активное смешанное содержимое не будет разрешено, и в результате сценарии на http не будут загружаться.

...