Я запутался в реализации nonce для встроенных скриптов и CSS. Я определил на сервере, что
res.locals.cspNonce = crypto.randomBytes(16).toString("hex");
а также
scriptSrc: ['я', 'nonce-${res.locals.cspNonce}'
]
и заметил, что сами фактические значения nonce не отображались в клиентском браузере (Brave), хотя, тем не менее, скрипт выполнялся, поэтому не уверен, что это просто проблема безопасности на уровне браузера, потому что, когда я изменил свой клиент- встроенный одноразовый номер на что-то жестко закодированное, например «abc», скрипт отказался запускаться, что хорошо. Я просто еще не понимаю. Является ли nonce просто стандартной фразой? Если бы я так решил, мог бы я просто установить на стороне сервера
scriptSrc: ["'self'", `'plackard=${res.locals.cspNonce}'`]
поэтому фраза «одноразовый номер» действительно не имеет значения, и я только что создал правило, согласно которому все сценарии на стороне клиента должны соответствовать атрибуту plackard=$somerandomcharaters
?
Наконец, настройки на стороне сервера обычно заключают в одинарные кавычки «nonce=something» или «nonce-something». Почему? Я понимаю, что стандартный синтаксис HTML 5 для пользовательских атрибутов данных: https://www.w3schools.com/tags/att_global_data.asp
data-custom="abc"
нет
'data-custom="abc"'
Дополнительная одинарная кавычка кажется ненужной и даже может запутать клиентскую часть браузера? Итак, заключайте в дополнительные одинарные кавычки все nonce или избавляйтесь от них? Является ли nonce исключением из стандартизированной парадигмы HTML5 fieldname=value и, следовательно, требует одинарных кавычек 'fieldname=value' или нет?
Если бы это было моим желанием, возникла бы проблема с настройкой моей серверной стороны 'nonce' как требующей, чтобы мой атрибут данных сценария говорил
data-my-custom-safe-attribute="$insertRandomCryptographyHere"
?