یک نکتهی تکمیلی: استفاده از nonce بجای هش
روش دیگری هم برای مشخص کردن اسکریپتها و شیوهنامههای inline وجود دارد که nonce نامیده میشود. nonce، یک مقدار منحصربفرد است که باید به ازای هر درخواست، یکبار دیگر به صورت خودکار، مجددا تولید شود (اگر ثابت باشد، مهاجم میتواند مقدار مشخص آنرا به اسکریپتهای خودش اضافه کند):
script-src 'nonce-rAnd0m'
<script nonce="rAnd0m"> </script>
مزیت آن، عدم نیاز به محاسبه و یا درج هش این قطعه اسکریپت، مطابق نکات مطلب جاری است؛ اما باید به صورت پویا به ازای هر درخواستی، مجددا در سمت سرور، تولید شود. همچنین تولید مجدد این مقدار، با کش شدن اطلاعات صفحه در تضاد است و باید به آن دقت داشت.
اگر از کتابخانهی NetEscapades.AspNetCore.SecurityHeaders استفاده میکنید، فراخوانی متد WithNonce آن:
builder.AddScriptSrc().Self().WithNonce()
HttpContext.Items["NETESCAPADES_NONCE"]
یک نکته: هنگام درج مقدار nonce در attributes، به HTML encoding آن دقت داشته باشید؛ این مقدار نباید encode شود (یا تغییر کند).