سياسة أمان المحتوى

سياسة أمان المحتوى ( CSP ) هي معيار أمان حاسوبي تم تقديمه لمنع هجمات البرمجة النصية عبر المواقع (XSS) وهجمات النقر الخادع وغيرها من هجمات حقن التعليمات البرمجية الناتجة عن تنفيذ محتوى ضار في سياق صفحة ويب موثوقة . [ 1 ] وهي توصية مرشحة من فريق عمل أمان تطبيقات الويب التابع لاتحاد شبكة الويب العالمية (W3C) ، [ 2 ] وتحظى بدعم واسع من متصفحات الويب الحديثة . [ 3 ] توفر سياسة أمان المحتوى طريقة قياسية لأصحاب مواقع الويب لتحديد مصادر المحتوى المعتمدة التي يُسمح للمتصفحات بتحميلها على تلك المواقع - وتشمل أنواع المحتوى المشمولة : جافا سكريبت ، وCSS ، وإطارات HTML ، وعمال الويب ، والخطوط ، والصور، والكائنات القابلة للتضمين مثل تطبيقات جافا الصغيرة ، و ActiveX ، وملفات الصوت والفيديو، وغيرها من ميزات HTML5 .

حالة

تم اقتراح المعيار، الذي كان يُسمى في الأصل قيود المحتوى، من قِبل روبرت هانسن في عام 2004، [ 4 ] وطُبِّق لأول مرة في متصفح فايرفوكس 4 ، وسرعان ما تبنّته متصفحات أخرى. نُشر الإصدار الأول من المعيار في عام 2012 كتوصية مرشحة من اتحاد شبكة الويب العالمية (W3C)، [ 5 ] وسرعان ما نُشرت إصدارات أخرى (المستوى 2) في عام 2014. اعتبارًا من عام 2023[ 6 ] يجري تطوير مسودة المستوى 3، ويتم اعتماد الميزات الجديدة بسرعة من قبل متصفحات الويب.

تُستخدم أسماء العناوين التالية كجزء من تطبيقات CSP التجريبية: [ 3 ]

  • Content-Security-Policy– اسم رأس الصفحة القياسي المقترح في وثيقة W3C. يدعم جوجل كروم هذا الاسم بدءًا من الإصدار 25. [ 7 ] ويدعمه فايرفوكس بدءًا من الإصدار 23، [ 8 ] الذي صدر في 6 أغسطس 2013. [ 9 ] ويدعمه WebKit بدءًا من الإصدار 528 (الإصدار الليلي). [ 10 ] أما دعم مايكروسوفت إيدج المبني على كروميوم فهو مشابه لدعم كروم. [ 11 ]
  • X-WebKit-CSP– رأسية تجريبية مهملة تم إدخالها في جوجل كروم وسفاري ومتصفحات الويب الأخرى المستندة إلى WebKit في عام 2011. [ 12 ]
  • X-Content-Security-Policy– رأسية تجريبية مهملة تم تقديمها في المتصفحات المستندة إلى Gecko 2 (من Firefox 4 إلى Firefox 22، وThunderbird 3.3، وSeaMonkey 2.1). [ 13 ]

يمكن للموقع الإلكتروني أن يُعلن عن عدة رؤوس CSP، بما في ذلك رؤوس الإنفاذ ورؤوس الإبلاغ فقط. وسيقوم المتصفح بمعالجة كل رأس على حدة.

يمكن أيضًا تضمين سياسة أمان المحتوى (CSP) ضمن كود HTML باستخدام علامة meta ، على الرغم من أن فعاليتها ستكون محدودة في هذه الحالة. [ 14 ]

يدعم كل من Internet Explorer 10 و Internet Explorer 11 أيضًا CSP، ولكن فقط توجيه sandbox، باستخدام X-Content-Security-Policyرأس تجريبي. [ 15 ]

تدعم العديد من أطر عمل تطبيقات الويب سياسة أمان المحتوى (CSP)، مثل AngularJS [ 16 ] (بشكل أصلي) و Django (كبرنامج وسيط). [ 17 ] وقد نشر GitHub تعليمات خاصة بـ Ruby on Rails . [ 18 ] ومع ذلك، فإن دعم إطار عمل الويب مطلوب فقط إذا كانت محتويات سياسة أمان المحتوى تعتمد بطريقة ما على حالة تطبيق الويب، مثل استخدام المصدر . بخلاف ذلك، تكون سياسة أمان المحتوى ثابتة ويمكن توفيرها من طبقات تطبيق الويب الأعلى، على سبيل المثال من خلال موازن الأحمال أو خادم الويب .nonce

الطرق الالتفافية

في ديسمبر 2015 [ 19 ] وديسمبر 2016 [ 20 ]'nonce' ، نُشرت عدة طرق لتجاوز قوائم السماح للمصادر. وفي يناير 2016 [ 21 ] ، نُشرت طريقة أخرى تستغل قوائم السماح لسياسة أمان المحتوى (CSP) على مستوى الخادم لاستغلال الإصدارات القديمة والضعيفة من مكتبات جافا سكريبت المستضافة على نفس الخادم (وهو أمر شائع مع خوادم شبكات توصيل المحتوى). وفي مايو 2017 [ 22 ] ، نُشرت طريقة أخرى لتجاوز سياسة أمان المحتوى باستخدام أكواد أطر عمل تطبيقات الويب.

طريقة التشغيل

الربط بين ميزات HTML5 و JavaScript وضوابط سياسة أمان المحتوى

إذا كان Content-Security-Policyرأس الطلب موجودًا في استجابة الخادم، فإن العميل المتوافق يفرض سياسة القائمة المسموح بها. أحد أهداف هذه السياسة هو فرض نمط تنفيذ أكثر صرامة للغة جافا سكريبت لمنع بعض هجمات البرمجة النصية عبر المواقع. عمليًا، يعني هذا تعطيل عدد من الميزات افتراضيًا.

  • كود جافا سكريبت مضمن [ أ ]
  • عبارات CSS المضمنة
    • <style>الكتلة [ ب ]
    • styleيُعزى ذلك إلى عناصر HTML
  • تقييم كود جافا سكريبت الديناميكي [ ج ]
    • eval()
    • وسائط السلسلة setTimeoutللدوالsetInterval
    • new Function()المُنشئ
  • عبارات CSS الديناميكية
    • CSSStyleSheet.insertRule()طريقة

على الرغم من أن استخدام سياسة أمان المحتوى (CSP) في تطبيق جديد قد يكون بسيطًا للغاية، خاصةً مع إطار عمل جافا سكريبت المتوافق معها، [ د ] إلا أن التطبيقات الحالية قد تتطلب بعض إعادة الهيكلة أو تخفيف السياسة. تتمثل أفضل ممارسات البرمجة لتطبيقات الويب المتوافقة مع CSP في تحميل التعليمات البرمجية من ملفات مصدر خارجية <script src>، وتحليل JSON بدلاً من تقييمه، واستخدامه EventTarget.addEventListener()لتعيين معالجات الأحداث. [ 23 ]

ملحوظات

  1. يمكن تعطيل هذا السلوك بشكل عام بواسطة'unsafe-inline'عبارة
  2. 1 2 يمكن إدراج الكتلالمضمنة الموثوقة في القائمة<script>المسموحعباراتأو<style>noncehash
  3. يمكن تعطيل هذا السلوك بشكل عام بواسطة'unsafe-eval'عبارة
  4. على سبيل المثال، لا يتطلب AngularJS سوى تغيير علامة تهيئة واحدة إلى الوضع المتوافق مع CSP—<html ng-app='' ng-csp=''>

إعداد التقارير

في كل مرة ينتهك فيها مورد مطلوب أو تنفيذ برنامج نصي السياسة، سيقوم المتصفح بإرسال POSTطلب إلى القيمة المحددة في report-uri[ 24 ] أو report-to[ 25 ] يحتوي على تفاصيل الانتهاك.

تقارير CSP هي هياكل JSON قياسية ويمكن التقاطها إما عن طريق واجهة برمجة التطبيقات الخاصة بالتطبيق [ 26 ] أو عن طريق مستقبلات تقارير CSP العامة.

في عام ٢٠١٨، كشف باحثون أمنيون عن كيفية إرسال تقارير إنذار كاذبة إلى المُستقبِل المُحدد report-uri. يسمح هذا للمهاجمين المحتملين بتفعيل هذه الإنذارات بشكل عشوائي، وقد يُقلل من جدواها في حال وقوع هجوم حقيقي. [ ٢٧ ] هذا السلوك مقصود ولا يمكن إصلاحه، لأن المتصفح (العميل) هو من يُرسل التقارير.

إعفاء إضافات المتصفح وملحقاته

وفقًا لنموذج معالجة CSP الأصلي (1.0) (2012-2013)، [ 28 ] لا ينبغي لـ CSP أن يتدخل في عمل إضافات المتصفح أو ملحقاته المثبتة من قِبل المستخدم. كانت هذه الخاصية في CSP ستوصي بالسماح لأي إضافة أو ملحق أو إشارة مرجعية بحقن نصوص برمجية في مواقع الويب، بغض النظر عن مصدر تلك النصوص، وبالتالي إعفائها من سياسات CSP.

مع ذلك، تم تعديل هذه السياسة لاحقًا (اعتبارًا من CSP 1.1) [ 29 ] بالصيغة التالية. لاحظ استخدام كلمة "يجوز" بدلًا من التوصية السابقة "ينبغي":

ملاحظة: قد تسمح برامج وكلاء المستخدم للمستخدمين بتعديل أو تجاوز تطبيق السياسة من خلال تفضيلات المستخدم، والإشارات المرجعية، وإضافات الطرف الثالث لبرنامج وكيل المستخدم، وآليات أخرى مماثلة.

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

تعتبر مجموعة عمل أمن تطبيقات الويب التابعة لاتحاد شبكة الويب العالمية (W3C) هذا النوع من البرامج النصية جزءًا من قاعدة الحوسبة الموثوقة التي يطبقها المتصفح؛ ومع ذلك، فقد جادل ممثل شركة كوكس للاتصالات أمام مجموعة العمل بأن هذا الاستثناء يمثل ثغرة أمنية محتملة يمكن استغلالها بواسطة إضافات أو ملحقات خبيثة أو مخترقة. [ 31 ] [ 32 ]

التدابير التكميلية

اعتبارًا من عام 2015يتم اقتراح عدد من معايير أمان المتصفح الجديدة من قبل W3C، ومعظمها مكمل لـ CSP: [ 33 ]

انظر أيضاً

مراجع

  1. سيد ستام (11 مارس 2009). "Security/CSP/Spec - MozillaWiki" . wiki.mozilla.org . تاريخ الاسترجاع: 29 يونيو 2011. تهدف سياسة أمان المحتوى إلى مساعدة مصممي المواقع الإلكترونية أو مديري الخوادم على تحديد كيفية تفاعل المحتوى على مواقعهم. كما أنها تساعد في التخفيف من حدة أنواع الهجمات واكتشافها، مثل هجمات البرمجة النصية عبر المواقع (XSS) وهجمات حقن البيانات .
  2. "حالة المسودة" . 13-09-2016 . تم الاطلاع عليه بتاريخ 05-10-2016 .
  3. 1 2 "هل يمكنني استخدام سياسة أمان المحتوى؟" . فايرد . تم الاطلاع عليه في 22 فبراير 2013 .
  4. روبرت هانسن (1 يونيو 2009). "سياسة أمان المحتوى لموزيلا" . مؤرشف من الأصل في 18 مارس 2015. تم الاطلاع عليه في 29 يونيو 2011. قيود المحتوى - طريقة تُمكّن مواقع الويب من إخبار المتصفح برفع مستوى الأمان على الصفحات التي يعلم الموقع أن محتواها مُقدّم من المستخدم، وبالتالي قد يكون خطيرًا.
  5. "سياسة أمان المحتوى 1.0" . اتحاد شبكة الويب العالمية . تم الاطلاع عليه بتاريخ 13 نوفمبر 2015 .
  6. "سياسة أمان المحتوى المستوى 3" . اتحاد شبكة الويب العالمية . تم الاطلاع عليه في 5 مايو 2023 .
  7. "Chrome 25 Beta: Content Security Policy and Shadow DOM" . جوجل. 14 يناير 2013. تم الاطلاع عليه في 22 فبراير 2013 .
  8. "سياسة أمان المحتوى 1.0 تُطرح في فايرفوكس أورورا" . مؤسسة موزيلا. 29 مايو 2013. تم الاطلاع عليه بتاريخ 16 يونيو 2013 .
  9. "RapidRelease/Calendar" . مؤسسة موزيلا. 29 مايو 2013. تم الاطلاع عليه في 16 يونيو 2013 .
  10. "الخطأ رقم 96765 - تطبيق ترويسة "Content-Security-Policy"" . WebKit. 31 أكتوبر 2012. تم الاطلاع عليه في 7 أغسطس 2015 .
  11. "سياسة أمان المحتوى (CSP)" . مايكروسوفت . تم الاطلاع عليه في 6 فبراير 2020 .
  12. "ميزات أمان جديدة في كروميوم، يونيو 2011" . جوجل. 14 يونيو 2011. تم الاطلاع عليه في 22 فبراير 2013 .
  13. "تقديم سياسة أمان المحتوى" . مؤسسة موزيلا . تم الاطلاع عليه بتاريخ 22 فبراير 2013 .
  14. "عنصر HTML META" . سياسة أمان المحتوى المستوى 2. اتحاد شبكة الويب العالمية (W3C) . تم الاطلاع عليه بتاريخ 14 نوفمبر 2015 .
  15. "الدفاع المتعمق: تأمين التطبيقات المدمجة باستخدام بيئة HTML5 المعزولة" . فريق هندسة متصفح إنترنت إكسبلورر لنظام ويندوز . تم الاطلاع عليه بتاريخ 13 أبريل 2014 .
  16. "توجيه ngCsp" . AngularJS . تم الاطلاع عليه بتاريخ 27 أكتوبر 2020 .
  17. "django-security" . GitHub . 21 نوفمبر 2022.
  18. "سياسة أمان المحتوى" . جيت هاب. 19 أبريل 2013.
  19. "CSP 2015" . XSS Jigsaw. 23 نوفمبر 2015. مؤرشف من الأصل في 20 ديسمبر 2015. تم الاطلاع عليه في 12 ديسمبر 2015 .
  20. ليكيس، سيباستيان. "مجموعة من تجاوزات CSP" . تم الاسترجاع في 2017-06-05 .
  21. "علاقة مسيئة مع AngularJS" . 12 ديسمبر 2015. تم الاطلاع عليه في 5 يناير 2016 .
  22. OWASP (25-05-2017)، مؤتمر AppSec EU 2017: لا تثق في DOM: تجاوز إجراءات الحماية من هجمات XSS عبر أدوات البرمجة النصية، بقلم سيباستيان ليكيس ، تم الاطلاع عليه بتاريخ 05-06-2017
  23. ويست، مايك (15 يونيو 2012). "مقدمة في سياسة أمان المحتوى" . HTML5 Rocks . تم الاطلاع عليه في 22 فبراير 2013 .
  24. "سياسة أمان المحتوى - المستوى 3" . www.w3.org . تم الاطلاع عليه بتاريخ 12 يناير 2021 .
  25. "CSP: report-to - HTTP | MDN" . developer.mozilla.org . تم الاطلاع عليه بتاريخ 25 يناير 2021 .
  26. على سبيل المثال، في Django، يتوفر مستقبل CSP فيوحدة django-security .
  27. "إرباك الفريق الأزرق - عندما تُربكهم، تخسرهم" . سيكجوس . 4 نوفمبر 2018. تم الاطلاع عليه بتاريخ 27 ديسمبر 2019 .
  28. "نموذج معالجة CSP" . 15-11-2012 . تم الاسترجاع في 6-10-2013 .
  29. "CSP 1.1: إضافة لغة غير معيارية للامتدادات" . GitHub w3c webappsec . GitHub. 27 فبراير 2014. تم الاطلاع عليه في 14 سبتمبر 2016 .
  30. "الخطأ رقم 866522 - تأثر الإشارات المرجعية بسياسة أمان المحتوى" . Bugzilla . Mozilla. 28 أبريل 2013. تم الاطلاع عليه بتاريخ 14 سبتمبر 2016 .
  31. "التحايل على سياسات أمان المحتوى (CSP) لإضافات المتصفح (الامتدادات)" . 25-09-2013 . تم الاطلاع عليه بتاريخ 06-10-2013 .
  32. "ردًا على: [ CSP ] طلب تعديل جملة الإشارة المرجعية/الامتدادات في CSP1.1" . 2014-08-03 . تم الاطلاع عليه بتاريخ 2015-10-08 .
  33. 1 2 "مجموعة عمل أمن تطبيقات الويب" . جيت هاب . تم الاسترجاع في 13 نوفمبر 2015 .
  34. "إضافة Noscript الأمنية لمتصفح Firefox" . addons.mozilla.org . تم الاطلاع عليه بتاريخ 11 يونيو 2017 .
  35. "إضافة NoScript لمتصفح Firefox - الموقع الرسمي" . noscript.net . تم الاطلاع عليه بتاريخ 11 يونيو 2017 .
  36. "لوحة تحكم HTTP لمتصفح Chrome" . chrome.google.com . مؤرشف من الأصل بتاريخ 17-08-2014.
  37. "لوحة تحكم HTTP لمتصفح أوبرا" . addons.opera.com . تم الاطلاع عليه بتاريخ 11 يونيو 2017 .