سياسة أمان المحتوى تستخدم الآن 'strict-dynamic'

نعم!

لدى MDN شرح جيد وأمثلة.

يعبر تعبير المصدر 'strict-dynamic' عن أن الثقة الممنوحة صراحةً لبرنامج نصي موجود في العلامة، عن طريق إقرانه برقم عشوائي (nonce) أو تجزئة (hash)، سيتم نشرها لجميع البرامج النصية التي تم تحميلها بواسطة هذا البرنامج النصي الجذر.

لذلك، طالما أن البرنامج النصي الأصلي موثوق به (عبر رقم عشوائي)، فإن المتصفح يسمح له بتحميل أي برامج نصية أخرى دون قيود. وبعد ذلك، نظرًا لأن هذه البرامج النصية موثوق بها، يمكنها تحميل المزيد!


هناك تحذير واحد، وهو أن البرامج النصية لا يمكن أن تكون “مُدرجة في المحلل”. هذا يمنع استخدام strict-dynamic للاستغلال في هجمات XSS.

لذلك، على سبيل المثال، سيكون هذا “مُدرجًا في المحلل” وسيتم حظره:

document.head.appendChild("<script src='https://example.com/xss-attempt.js' />");

ولكن، إنشاء عنصر البرنامج النصي برمجيًا لا يتضمن تحليل HTML، ومن غير المرجح أن يكون ناقلًا لهجمات XSS، ولذلك يُسمح به:

const script = document.createElement("script");
script.src = "https://example.com/script.js"
document.head.appendChild(script);

^^ هذا هو أساسًا كيف يعمل loadScript()

3 إعجابات