Я пытаюсь определить политику CSP для своего веб-сервиса и использую новые функции в Scala Play 2.7 .
Вот что я сделал:
- Установите директиву CSP и настройку nonce в моем приложении .conf
csp {
nonce {
enabled = true
pattern = "%CSP_NONCE_PATTERN%"
header = false
}
directives {
base-uri = "'none'"
object-src = "'none'"
script-src = ${play.filters.csp.nonce.pattern} "'unsafe-inline' 'unsafe-eval' 'strict-dynamic' https: http:"
}
}
- В шаблоне Twirl я делаю ссылку на одноразовый номер следующим образом:
<script @{CSPNonce.attr}...</script>
<script @{CSPNonce.attr} ..</script>
Пара наблюдений:
- Согласно документации, если я включу
csp.header = true
в application.conf, я должен увидеть значение nonce в RequestHeader, которое неявно заносится в шаблон Twirl. Я вообще не вижу этот заголовок при распечатке значений заголовка.
- Аналогичным образом, я не вижу одноразового значения в тегах скрипта при просмотре сгенерированного HTML в своем браузере.
- Независимо от того, добавляю ли я фрагмент
@{CSPNonce.attr}
Twirl в мой код встроенного сценария, загружается встроенный JS. Это странно, так как я думал, что только встроенные скрипты, помеченные правильными одноразовыми номерами, могут загружаться только.
Так в чем же дело? Я не правильно использую эту функцию?