المرجع السريع لعناوين الأمان

تعرَّف على مزيد من المعلومات حول الرؤوس التي يمكنها الحفاظ على أمان موقعك الإلكتروني والبحث بسرعة عن أهم التفاصيل.

أرتور جانك
أرتور جانك
مود نالباس
مود ناالبا

تسرد هذه المقالة أهم رؤوس الأمان التي يمكنك استخدامها لحماية موقعك الإلكتروني. وبإمكانك استخدامها لفهم ميزات الأمان المستنِدة إلى الويب وكيفية تنفيذها في موقعك الإلكتروني وكمرجع عند الحاجة إلى تذكير.

عناوين الأمان المُقترَحة للمواقع الإلكترونية التي تعالج بيانات المستخدمين الحساسة:
سياسة أمان المحتوى (CSP)
الأنواع الموثوق بها
يُنصح باستخدام عناوين الأمان لجميع المواقع الإلكترونية:
X-Content-Type-Options
خيارات الإطار X
سياسة الموارد المتعدّدة المصادر (CORP)
سياسة فتح التطبيقات المتعدّدة المصادر (COOP)
الأمان المشدَّد لنقل البيانات باستخدام بروتوكول HTTP (HSTS)
عناوين الأمان للمواقع الإلكترونية ذات الإمكانيات المتقدّمة:
مشاركة الموارد المتعدّدة المصادر (CORS)
سياسة أداة تضمين الموارد المتعدّدة المصادر (COEP)
التهديدات المعروفة على الويب
قبل التعمق في رؤوس الأمان، تعرف على التهديدات المعروفة على الويب ولماذا تحتاج إلى استخدام رؤوس الأمان هذه.

قبل التعمق في عناوين الأمان، تعرَّف على التهديدات المعروفة على الويب والسبب الذي من أجله قد تحتاج إلى استخدام رؤوس الأمان هذه.

حماية موقعك من ثغرات الحقن

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

عادةً ما تمنح الثغرة الأمنية XSS المهاجم وصولاً كاملاً إلى بيانات المستخدم التي يعالجها التطبيق وأي معلومات أخرى يستضيفها أصل الويب نفسه.

تشمل إجراءات الدفاع التقليدية ضد الحقن الاستخدام المتسق لأنظمة نماذج HTML الاستغناء عن المحتوى تلقائيًا، وتجنُّب استخدام واجهات برمجة تطبيقات JavaScript الخطيرة، ومعالجة بيانات المستخدمين بشكل سليم من خلال استضافة عمليات تحميل الملفات في نطاق منفصل وتنقيح ترميز HTML الذي يتحكّم فيه المستخدم.

  • استخدِم سياسة أمان المحتوى (CSP) للتحكّم في النصوص البرمجية التي يمكن للتطبيق تنفيذها للحدّ من خطر عمليات الحقن.
  • استخدِم الأنواع الموثوق بها لفرض تنظيف البيانات التي يتم تمريرها إلى واجهات برمجة تطبيقات JavaScript الخطيرة.
  • استخدِم X-Content-Type-Options لمنع المتصفّح من إساءة تفسير أنواع MIME لموارد موقعك الإلكتروني، ما قد يؤدي إلى تنفيذ النص البرمجي.

عزل الموقع عن المواقع الإلكترونية الأخرى

يسمح انفتاح الويب للمواقع الإلكترونية بالتفاعل مع بعضها البعض بطرق قد تنتهك التوقعات الأمنية لأحد التطبيقات. ويشمل ذلك إجراء طلبات تمت مصادقتها بشكل غير متوقع أو تضمين بيانات من تطبيق آخر في مستند المهاجم، ما يسمح للمهاجم بتعديل بيانات التطبيق أو قراءتها.

تشمل الثغرات الشائعة التي تُضعف عزل الويب تمويه النقر وتزوير الطلبات من مواقع إلكترونية مختلفة (CSRF) وتضمين النصوص البرمجية من مواقع إلكترونية مختلفة (XSSI) وعمليات تسرّب متعددة على مواقع إلكترونية متعددة.

ننصحك بقراءة مقالة Post-Spectre Web Development إذا كنت مهتمًا بهذه العناوين.

إنشاء موقع إلكتروني قوي بأمان

يضع Spectre أي بيانات تم تحميلها في مجموعة سياق التصفّح نفسها التي يُحتمل أن تكون قابلة للقراءة، على الرغم من سياسة المصدر نفسه. وتحظر المتصفّحات ميزات من المحتمل أن تستغل الثغرة الأمنية وراء بيئة خاصة تُعرف باسم "العزل المشترك المصدر". من خلال حظر الوصول من نطاقات أخرى، يمكنك استخدام ميزات فعّالة مثل SharedArrayBuffer.

تشفير الزيارات الواردة إلى موقعك الإلكتروني

تظهر مشاكل التشفير عندما لا يشفِّر التطبيق البيانات بالكامل أثناء نقلها، ما يسمح للمهاجمين بالتجسس لمعرفة المزيد من المعلومات عن تفاعلات المستخدم مع التطبيق.

يمكن أن ينشأ تشفير غير كافٍ في الحالات التالية: عدم استخدام HTTPS أو المحتوى المختلَط أو ضبط ملفات تعريف ارتباط بدون سمة Secure (أو __Secure بادئة) أو منطق تحقُّق CORS غير المرن.

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

هجوم النص البرمجي عبر المواقع الإلكترونية (XSS) هو هجوم تشنّه ثغرة على أحد المواقع الإلكترونية تتيح إدخال نص برمجي ضار وتنفيذه.

يوفر Content-Security-Policy طبقة إضافية للتخفيف من هجمات XSS عن طريق تقييد النصوص البرمجية التي يمكن تنفيذها من الصفحة.

ننصحك بتفعيل سياسة CSP صارمة باستخدام أحد الأساليب التالية:

  • في حال عرض صفحات HTML على الخادم، استخدِم سياسة CSP صارمة غير قائمة على أساس غير.
  • إذا كان يجب عرض HTML بشكل ثابت أو مخزَّن مؤقتًا، على سبيل المثال، إذا كان تطبيقًا من صفحة واحدة، استخدِم سياسة CSP صارمة مستندة إلى التجزئة.

مثال على الاستخدام: سياسة أمان محتوى (CSP) مستندة إلى عدم التأسيس

Content-Security-Policy:
  script-src 'nonce-{RANDOM1}' 'strict-dynamic' https: 'unsafe-inline';
  object-src 'none';
  base-uri 'none';
كيفية استخدام سياسة CSP

1- استخدام سياسة CSP صارمة مستندة إلى nonce {: #nonce-based-csp}

في حال عرض صفحات HTML على الخادم، استخدِم سياسة CSP صارمة غير قائمة على أساس غير.

يمكنك إنشاء قيمة nonce الجديدة للنص البرمجي لكل طلب من جهة الخادم وضبط العنوان التالي:

ملف إعداد الخادم

Content-Security-Policy:
  script-src 'nonce-{RANDOM1}' 'strict-dynamic' https: 'unsafe-inline';
  object-src 'none';
  base-uri 'none';

في HTML، لتحميل النصوص البرمجية، يجب ضبط السمة nonce لجميع علامات <script> على سلسلة {RANDOM1} نفسها.

index.html

<script nonce="{RANDOM1}" src="https://example.com/script1.js"></script>
<script nonce="{RANDOM1}">
  // Inline scripts can be used with the <code>nonce</code> attribute.
</script>

يُعدّ صور Google مثالاً جيدًا وصارمًا على سياسة CSP يستند إلى معايير صارمة. يمكنك استخدام "أدوات مطوري البرامج" لمعرفة كيفية استخدامها.

2- استخدام سياسة CSP صارمة مستندة إلى التجزئة {: #hash-based-csp}

إذا كان يجب عرض HTML بشكل ثابت أو مخزَّن مؤقتًا، على سبيل المثال، عند إنشاء تطبيق من صفحة واحدة، استخدِم سياسة CSP صارمة مستندة إلى التجزئة.

ملف إعداد الخادم

Content-Security-Policy:
  script-src 'sha256-{HASH1}' 'sha256-{HASH2}' 'strict-dynamic' https: 'unsafe-inline';
  object-src 'none';
  base-uri 'none';

في HTML، ستحتاج إلى تضمين النصوص البرمجية لتطبيق سياسة مستندة إلى التجزئة، لأنّ معظم المتصفحات لا تتيح تجزئة النصوص البرمجية الخارجية.

index.html

<script>
...// your script1, inlined
</script>
<script>
...// your script2, inlined
</script>

لتحميل نصوص برمجية خارجية، اقرأ "تحميل النصوص البرمجية المصدر ديناميكيًا" ضمن قسم الخيار ب: عنوان استجابة CSP المستند إلى التجزئة.

مقيّم CSP هو أداة جيدة لتقييم سياسة CSP، ولكنه في الوقت نفسه مثال جيد على سياسة CSP يستند إلى معايير صارمة. يمكنك استخدام "أدوات مطوري البرامج" لمعرفة كيفية استخدامها.

المتصفحات المعتمدة

أمور أخرى يجب مراعاتها حول سياسة أمان المحتوى (CSP)

  • frame-ancestors يحمي موقعك الإلكتروني من الاستيلاء على النقرات، وهو خطر ينشأ في حال السماح للمواقع الإلكترونية غير الموثوق بها بتضمين موقعك الإلكتروني. إذا كنت تفضّل حلاً أبسط، يمكنك استخدام X-Frame-Options لحظر التحميل، إلا أنّ frame-ancestors يتيح لك إعدادًا متقدّمًا للسماح بإدراج مصادر معيّنة فقط كأدوات تضمين.
  • ربما تكون قد استخدمت سياسة CSP لضمان تحميل جميع موارد موقعك الإلكتروني عبر HTTPS. أصبح ذلك أقل صلة: في الوقت الحالي، تحظر معظم المتصفحات المحتوى المختلَط.
  • يمكنك أيضًا ضبط سياسة أمان محتوى (CSP) في وضع إعداد التقارير فقط.
  • إذا لم تتمكن من ضبط سياسة أمان المحتوى (CSP) كخادم عناوين، يمكنك أيضًا ضبطها كعلامة وصفية. يُرجى العلم أنّه لا يمكنك استخدام وضع إعداد التقارير فقط للعلامات الوصفية (على الرغم من أنّ هذا قد يتغيّر).

مزيد من المعلومات

الأنواع الموثوق بها

بروتوكول XSS المستنِد إلى نموذج كائن المستند (DOM) هو هجوم يتم من خلاله نقل بيانات ضارة إلى حوض يتيح تنفيذ الرموز الديناميكية مثل eval() أو .innerHTML.

توفر الأنواع الموثوق بها الأدوات اللازمة لكتابة التطبيقات، ومراجعة الأمان لها، وصيانتها بدون أن تتضمن DOM XSS. ويمكن تفعيلها من خلال CSP وجعل رمز JavaScript آمنًا تلقائيًا من خلال تقييد واجهات برمجة تطبيقات الويب الخطيرة بحيث لا تقبل سوى كائن خاص، وهو نوع موثوق به.

لإنشاء هذه العناصر، يمكنك تحديد سياسات الأمان التي يمكنك من خلالها التأكد من تطبيق قواعد الأمان (مثل الخروج أو التعقيم) بشكل متسق قبل كتابة البيانات في DOM. وتكون هذه السياسات حينها هي الأماكن الوحيدة في التعليمات البرمجية التي من المحتمل أن تقدم DOM XSS.

أمثلة على الاستخدامات

Content-Security-Policy: require-trusted-types-for 'script'
// Feature detection
if (window.trustedTypes && trustedTypes.createPolicy) {
  // Name and create a policy
  const policy = trustedTypes.createPolicy('escapePolicy', {
    createHTML: str => {
      return str.replace(/\</g, '&lt;').replace(/>/g, '&gt;');
    }
  });
}

// Assignment of raw strings is blocked by Trusted Types.
el.innerHTML = &#39;some string&#39;; // This throws an exception.

// Assignment of Trusted Types is accepted safely.
const escaped = policy.createHTML(&#39;&lt;img src=x onerror=alert(1)&gt;&#39;);
el.innerHTML = escaped;  // &#39;&amp;lt;img src=x onerror=alert(1)&amp;gt;&#39;

كيفية استخدام الأنواع الموثوق بها

  1. فرض "الأنواع الموثوق بها" لأحواض DOM الخطيرة عنوان "CSP" و" Trusted Types":

    Content-Security-Policy: require-trusted-types-for 'script'
    

    تمثّل القيمة 'script' في الوقت الحالي القيمة الوحيدة المقبولة لتوجيه require-trusted-types-for.

    وبالطبع، يمكنك دمج الأنواع الموثوق بها مع توجيهات CSP الأخرى:

دمج سياسة أمان محتوى (CSP) غير مستندة إلى معايير أعلى مع الأنواع الموثوق بها:

Content-Security-Policy:
  script-src &#39;nonce-{RANDOM1}&#39; &#39;strict-dynamic&#39; https: &#39;unsafe-inline&#39;;
  object-src &#39;none&#39;;
  base-uri &#39;none&#39;;
  require-trusted-types-for &#39;script&#39;;

<aside class="note"><b>ملاحظة: </b> يمكنك تحديد أسماء سياسات "الأنواع الموثوق بها" المسموح بها من خلال ضبط توجيه <code>trusted-types</code> إضافي (مثل <code>trusted-types myPolicy</code>). إلا أنّ هذا ليس مطلبًا. </aside>

  1. تحديد سياسة

    السياسة:

    // Feature detection
    if (window.trustedTypes && trustedTypes.createPolicy) {
      // Name and create a policy
      const policy = trustedTypes.createPolicy('escapePolicy', {
        createHTML: str => {
          return str.replace(/\/g, '>');
        }
      });
    }
    
  2. تطبيق السياسة

    استخدِم السياسة عند كتابة البيانات في نموذج العناصر في المستند (DOM):

    // Assignment of raw strings are blocked by Trusted Types.
    el.innerHTML = &#39;some string&#39;; // This throws an exception.</p>
    
    <p>// Assignment of Trusted Types is accepted safely.
    const escaped = policy.createHTML(&#39;<img src="x" onerror="alert(1)">&#39;);
    el.innerHTML = escaped;  // &#39;&lt;img src=x onerror=alert(1)&gt;&#39;
    

    في السمة require-trusted-types-for 'script'، يجب استخدام نوع موثوق به. سيؤدي استخدام أي واجهة برمجة تطبيقات DOM API خطيرة مع سلسلة إلى حدوث خطأ.

المتصفحات المعتمدة

مزيد من المعلومات

X-Content-Type-Options

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

تمنع علامة X-Content-Type-Options: nosniff ذلك من خلال إعلام المتصفّح بأنّ نوع MIME الذي تم ضبطه في عنوان Content-Type لاستجابة معيّنة صحيح. يُنصح باستخدام هذا العنوان لجميع مواردك.

مثال على الاستخدام

X-Content-Type-Options: nosniff
كيفية استخدام خيارات نوع المحتوى X

يُنصح باستخدام السمة X-Content-Type-Options: nosniff لجميع الموارد التي يتم عرضها من الخادم بالإضافة إلى عنوان Content-Type الصحيح.

خيارات نوع المحتوى X: nosniff

أمثلة على العناوين التي تم إرسالها باستخدام رمز HTML للمستند

X-Content-Type-Options: nosniff
Content-Type: text/html; charset=utf-8

المتصفحات المعتمدة

التوافق مع المتصفح

  • 64
  • 12
  • 50
  • 11

المصدر

مزيد من المعلومات

خيارات الإطار X

إذا كان بإمكان أحد المواقع الإلكترونية الضارّة تضمين موقعك الإلكتروني في إطار iframe، قد يسمح ذلك للمهاجمين باستدعاء إجراءات غير مقصودة من جانب المستخدم من خلال تمويه النقر. بالإضافة إلى ذلك، تمنح هجمات Spectre-type المواقع الإلكترونية الضارة فرصة للتعرف على محتويات مستند مضمّن.

تشير السمة X-Frame-Options إلى ما إذا كان يجب السماح للمتصفح بعرض صفحة في <frame> أو <iframe> أو <embed> أو <object>. ننصحك بجميع المستندات إرسال هذا العنوان للإشارة إلى ما إذا كان يسمح بتضمينها في مستندات أخرى.

مثال على الاستخدام

X-Frame-Options: DENY
كيفية استخدام خيارات الإطار X

ويجب استخدام العنوان X-Frame-Options في جميع المستندات التي لم يتم تصميمها لتضمينها.

يمكنك تجربة كيفية تأثير الإعدادات التالية في تحميل إطار iframe في هذا العرض التوضيحي. غيِّر القائمة المنسدلة X-Frame-Options وانقر على الزر إعادة تحميل إطار iframe.

حماية موقعك الإلكتروني من أن يتم تضمينه في أي مواقع إلكترونية أخرى

يتم رفض تضمينه في أي مستندات أخرى.

خيارات الإطار X: منع
X-Frame-Options: DENY

حماية موقعك الإلكتروني من تضمينه في أي مواقع إلكترونية متعددة المصادر

السماح بتضمين المستندات من المصدر نفسه فقط

X-Frame-Options: SAMEORIGIN

المتصفحات المعتمدة

التوافق مع المتصفح

  • 4
  • 12
  • 4
  • 4

المصدر

مزيد من المعلومات

سياسة الموارد المتعدّدة المصادر (CORP)

يمكن للمهاجم تضمين موارد من مصدر آخر، من موقعك على سبيل المثال، للحصول على معلومات حولها من خلال استغلال التسريبات المستنِدة إلى الويب بين المواقع الإلكترونية.

يخفف Cross-Origin-Resource-Policy من هذه المخاطر من خلال الإشارة إلى مجموعة المواقع الإلكترونية التي يمكن التحميل من خلالها. ويكون العنوان واحدة من ثلاث قيم: same-origin وsame-site وcross-origin. ننصح بجميع الموارد بإرسال هذا العنوان للإشارة إلى ما إذا كانت تسمح بتحميل البيانات من خلال مواقع إلكترونية أخرى.

مثال على الاستخدام

Cross-Origin-Resource-Policy: same-origin
كيفية استخدام سياسة CORP

ويُنصح بعرض جميع الموارد باستخدام أحد العناوين الثلاثة التالية.

يمكنك تجربة كيفية تأثير الإعدادات التالية في تحميل الموارد ضمن بيئة Cross-Origin-Embedder-Policy: require-corp في هذا العرض التوضيحي. غيِّر القائمة المنسدلة Cross-Origin-Resource-Policy وانقر على الزر إعادة تحميل إطار iframe أو إعادة تحميل الصورة لرؤية التأثير.

السماح بتحميل الموارد cross-origin

ننصح بأن تطبّق الخدمات المشابهة لشبكة توصيل المحتوى cross-origin على الموارد (لأنّها يتم تحميلها عادةً من خلال صفحات متعددة المصادر)، ما لم يتم عرضها من خلال CORS، ما يؤدي إلى تأثير مشابه.

سياسة الموارد المشتركة: مصادر متعددة
Cross-Origin-Resource-Policy: cross-origin

الحدّ من الموارد التي سيتم تحميلها من "same-origin"

يجب تطبيق السمة same-origin على الموارد التي يُفترض أن يتم تحميلها من خلال الصفحات من المصدر نفسه فقط. وعليك تطبيق ذلك على الموارد التي تتضمّن معلومات حساسة حول المستخدم أو استجابات من واجهة برمجة تطبيقات الغرض منها طلبها من المصدر نفسه فقط.

يُرجى العِلم أنّه لا يزال من الممكن تحميل الموارد التي تحتوي على هذا العنوان مباشرةً، مثلاً من خلال الانتقال إلى عنوان URL في نافذة متصفّح جديدة. تعمل "سياسة الموارد المتعدّدة المصادر" على حماية المورد فقط من تضمينه في مواقع إلكترونية أخرى.

سياسة الموارد المشتركة: المصدر نفسه
Cross-Origin-Resource-Policy: same-origin

الحدّ من الموارد التي سيتم تحميلها من "same-site"

ننصحك بتطبيق علامة same-site على الموارد المشابهة لتلك الواردة أعلاه، ولكن يُقصد منها أن يتم تحميلها من خلال نطاقات فرعية أخرى في موقعك الإلكتروني.

سياسة الموارد المشتركة: الموقع نفسه
Cross-Origin-Resource-Policy: same-site

المتصفحات المعتمدة

التوافق مع المتصفح

  • 73
  • 79
  • 74
  • 12

المصدر

مزيد من المعلومات

سياسة إتاحة التشغيل من مصادر متعددة (COOP)

يمكن للموقع الإلكتروني للمهاجم فتح موقع آخر في نافذة منبثقة لمعرفة معلومات حوله من خلال استغلال التسريبات المستنِدة إلى الويب بين المواقع الإلكترونية. وفي بعض الحالات، قد يسمح هذا الإجراء أيضًا باستغلال هجمات القنوات الجانبية المستندة إلى Spectre.

يوفّر عنوان Cross-Origin-Opener-Policy طريقة للمستند لعزل نفسه عن النوافذ المتعددة المصادر المفتوحة من خلال window.open() أو رابط مع target="_blank" بدون rel="noopener". نتيجة لذلك، لن يكون لأي مستخدم مفتوح المصدر للمستند أي إشارة إليه ولن يتمكن من التفاعل معه.

مثال على الاستخدام

Cross-Origin-Opener-Policy: same-origin-allow-popups
كيفية استخدام COOP

يمكنك تجربة كيفية تأثير الإعدادات التالية في التواصل من خلال نافذة منبثقة من مصادر متعددة في هذا العرض التوضيحي. غيِّر القائمة المنسدلة Cross-Origin-Opener-Policy لكل من المستند والنافذة المنبثقة، وانقر على الزر فتح نافذة منبثقة، ثم انقر على إرسال رسالة postMessage لمعرفة ما إذا تم تسليم الرسالة أم لا.

عزل مستند عن النوافذ المشتركة المصدر

يؤدي ضبط same-origin إلى عزل المستند عن نوافذ المستندات المشتركة المصدر.

سياسة Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Opener-Policy: same-origin

عزل المستند عن النوافذ المشتركة المصدر مع السماح بالنوافذ المنبثقة

يؤدي ضبط same-origin-allow-popups إلى السماح للمستند بالاحتفاظ بمرجع في نوافذه المنبثقة ما لم يتم ضبط COOP باستخدام same-origin أو same-origin-allow-popups. ويعني ذلك أنّ بإمكان same-origin-allow-popups حماية المستند من الرجوع إليه عند فتحه كنافذة منبثقة، مع السماح له بالتواصل مع النوافذ المنبثقة الخاصة به.

سياسة Cross-Origin-Opener-Policy: same-origin-allow-popups
Cross-Origin-Opener-Policy: same-origin-allow-popups

السماح بالرجوع إلى مستند من خلال نوافذ متعددة المصادر

unsafe-none هي القيمة التلقائية، ولكن يمكنك الإشارة بشكل صريح إلى أنّه يمكن فتح هذا المستند من خلال نافذة من مصادر متعددة مع الاحتفاظ بإمكانية الوصول المتبادل.

سياسة Open-Origin-Opener-Policy: غير آمنة-بدون
Cross-Origin-Opener-Policy: unsafe-none

الإبلاغ عن أنماط غير متوافقة مع COOP

يمكنك تلقّي تقارير عندما تمنع أداة COOP التفاعل بين النوافذ المتعددة مع واجهة برمجة التطبيقات Reporting API.

Cross-Origin-Opener-Policy: same-origin; report-to="coop"

يتيح COOP أيضًا استخدام وضع إعداد التقارير فقط، ما يتيح لك تلقّي التقارير بدون حظر الاتصال بين المستندات المتعددة المصادر.

Cross-Origin-Opener-Policy-Report-Only: same-origin; report-to="coop"

المتصفحات المعتمدة

التوافق مع المتصفح

  • 83
  • 83
  • 79
  • 15.2

المصدر

مزيد من المعلومات

مشاركة الموارد المتعدّدة المصادر (CORS)

على عكس العناصر الأخرى الواردة في هذه المقالة، لا تُعد مشاركة الموارد المتعدّدة المصادر (CORS) عنوانًا، ولكنها آلية متصفّح تطلب من المستخدمين الوصول إلى الموارد المتعدّدة المصادر وتسمح لهم بالوصول إليها.

تفرض المتصفحات سياسة المصدر نفسه تلقائيًا لمنع صفحة ويب من الوصول إلى الموارد المتعددة المصادر. على سبيل المثال، عند تحميل صورة من مصادر متعددة، على الرغم من عرضها على صفحة الويب بشكل مرئي، لا يمكن لملف JavaScript في الصفحة الوصول إلى بيانات الصورة. يمكن لموفّر الموارد تخفيف القيود والسماح للمواقع الإلكترونية الأخرى بقراءة المورد عن طريق الاشتراك في بروتوكول CORS.

مثال على الاستخدام

Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true
كيفية استخدام CORS

قبل النظر في طريقة ضبط بروتوكول CORS، من الضروري فهم الفرق بين أنواع الطلبات. وبناءً على تفاصيل الطلب، سيتم تصنيف الطلب كطلب بسيط أو طلب تم تنفيذه مسبقًا.

معايير الطلب البسيط:

  • الطريقة هي GET أو HEAD أو POST.
  • لا تتضمّن العناوين المخصّصة سوى Accept وAccept-Language وContent-Language وContent-Type.
  • قيمة Content-Type هي application/x-www-form-urlencoded أو multipart/form-data أو text/plain.

ويتم تصنيف كل شيء آخر كطلب مقدَّم مسبقًا. لمزيد من التفاصيل، راجِع مشاركة الموارد المتعدّدة المصادر (CORS) - HTTP | MDN.

طلب بسيط

عندما يستوفي الطلب معايير الطلب البسيطة، يرسل المتصفّح طلبًا من مصادر متعددة يتضمن العنوان Origin الذي يشير إلى مصدر الطلب.

مثال على عنوان الطلب

Get / HTTP/1.1
Origin: https://example.com

مثال على عنوان الاستجابة

Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true
  • تشير السمة Access-Control-Allow-Origin: https://example.com إلى أنّه بإمكان https://example.com الوصول إلى محتوى الردّ. يمكن للموارد المصممة لتكون سهلة القراءة من خلال أي موقع إلكتروني ضبط هذا العنوان على *، وفي هذه الحالة لن يطلب المتصفّح سوى تقديم الطلب بدون بيانات اعتماد.
  • تشير السمة Access-Control-Allow-Credentials: true إلى أنّه يُسمح للطلبات التي تتضمّن بيانات اعتماد (ملفات تعريف الارتباط) بتحميل المورد. وبخلاف ذلك، سيتم رفض الطلبات التي تمت مصادقتها حتى إذا كان مصدر الطلب متوفرًا في عنوان Access-Control-Allow-Origin.

يمكنك تجربة كيفية تأثير الطلب البسيط في تحميل الموارد ضمن بيئة Cross-Origin-Embedder-Policy: require-corp في هذا العرض التوضيحي. انقر على مربّع الاختيار مشاركة الموارد المتعدّدة المصادر وانقر على الزر إعادة تحميل الصورة للاطّلاع على التأثير.

الطلبات المقدّمة مُسبقًا

ويأتي الطلب الذي تم إرساله مُسبقًا بطلب OPTIONS للتحقّق مما إذا كان مسموحًا بإرسال الطلب اللاحق.

مثال على عنوان الطلب

OPTIONS / HTTP/1.1
Origin: https://example.com
Access-Control-Request-Method: POST
Access-Control-Request-Headers: X-PINGOTHER, Content-Type
  • تسمح السمة Access-Control-Request-Method: POST بتقديم الطلب التالي باستخدام الطريقة POST.
  • تسمح السمة Access-Control-Request-Headers: X-PINGOTHER, Content-Type لمقدّم الطلب بضبط عنوانَي HTTP X-PINGOTHER وContent-Type في الطلب اللاحق.

أمثلة على عناوين الاستجابة

Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: POST, GET, OPTIONS
Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
Access-Control-Max-Age: 86400
  • تشير السمة Access-Control-Allow-Methods: POST, GET, OPTIONS إلى أنّه يمكن إرسال الطلبات اللاحقة باستخدام الطرق POST وGET وOPTIONS.
  • تشير السمة Access-Control-Allow-Headers: X-PINGOTHER, Content-Type إلى أنّ الطلبات اللاحقة يمكن أن تتضمّن العنوانَين X-PINGOTHER وContent-Type.
  • تشير السمة Access-Control-Max-Age: 86400 إلى أنّه يمكن تخزين نتيجة الطلب المقدَّم مسبقًا مؤقتًا لمدة 86400 ثانية.

المتصفحات المعتمدة

التوافق مع المتصفح

  • 4
  • 12
  • 3.5
  • 4

المصدر

مزيد من المعلومات

سياسة أداة تضمين المحتوى من مصادر متعددة (COEP)

لتقليل قدرة الهجمات المستندة إلى Spectre على سرقة الموارد من مصادر متعددة، يتم إيقاف ميزات مثل SharedArrayBuffer أو performance.measureUserAgentSpecificMemory() بشكل تلقائي.

تمنع ميزة Cross-Origin-Embedder-Policy: require-corp المستندات والعاملين من تحميل الموارد المتعددة المصادر، مثل الصور والنصوص البرمجية وأوراق الأنماط وإطارات iframe وغيرها، ما لم يتم تفعيل التحميل بشكل صريح لهذه الموارد من خلال عناوين CORS أو CORP. يمكن دمج بروتوكول COEP مع Cross-Origin-Opener-Policy لتفعيل حظر الوصول من نطاقات أخرى في مستند معيّن.

يمكنك استخدام Cross-Origin-Embedder-Policy: require-corp عندما تريد تفعيل العزل المشترك المصدر للمستند.

مثال على الاستخدام

Cross-Origin-Embedder-Policy: require-corp
كيفية استخدام سياسة COEP

أمثلة على الاستخدامات

يحتوي COEP على قيمة واحدة تبلغ require-corp. من خلال إرسال هذا العنوان، يمكنك توجيه المتصفّح لحظر تحميل الموارد التي لا يتم تفعيلها من خلال CORS أو CORP.

آلية عمل سياسة COEP

يمكنك تجربة كيفية تأثير الإعدادات التالية في تحميل الموارد في هذا العرض التوضيحي. غيِّر القائمة المنسدلة Cross-Origin-Embedder-Policy، والقائمة المنسدلة Cross-Origin-Embedder-Policy، ومربّع الاختيار Cross-Origin-Embedder-Policy، وما إلى ذلك لمعرفة مدى تأثيرها في تحميل الموارد. بالإضافة إلى ذلك، افتح العرض التوضيحي لنقطة نهاية إعداد التقارير لمعرفة ما إذا تم الإبلاغ عن الموارد المحظورة.

تفعيل حظر الوصول من نطاقات أخرى

فعِّل عزل البيانات من نطاقات أخرى من خلال إرسال Cross-Origin-Embedder-Policy: require-corp مع Cross-Origin-Opener-Policy: same-origin.

Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-origin

الإبلاغ عن الموارد غير المتوافقة مع سياسة COEP

يمكنك تلقّي تقارير عن الموارد المحظورة الناتجة عن سياسة COEP، وذلك باستخدام Reporting API.

Cross-Origin-Embedder-Policy: require-corp; report-to="coep"

يتوافق بروتوكول COEP أيضًا مع وضع إعداد التقارير فقط، ما يتيح لك تلقّي التقارير بدون حظر تحميل الموارد.

Cross-Origin-Embedder-Policy-Report-Only: require-corp; report-to="coep"

المتصفحات المعتمدة

التوافق مع المتصفح

  • 83
  • 83
  • 79
  • 15.2

المصدر

مزيد من المعلومات

الأمان المشدَّد لنقل البيانات باستخدام بروتوكول HTTP (HSTS)

لا يتم تشفير الاتصال عبر اتصال HTTP عادي، ما يتيح للمتنصتين على مستوى الشبكة الوصول إلى البيانات المنقولة.

ويُعلِم عنوان Strict-Transport-Security المتصفّح بأنّه يجب عدم تحميل الموقع الإلكتروني باستخدام بروتوكول HTTP واستخدام بروتوكول HTTPS بدلاً من ذلك. بعد ضبطه، سيستخدم المتصفح بروتوكول HTTPS بدلاً من HTTP للوصول إلى النطاق بدون إعادة توجيه للمدة المحددة في العنوان.

مثال على الاستخدام

Strict-Transport-Security: max-age=31536000
كيفية استخدام آلية HSTS

من المفترض أن تستجيب جميع المواقع الإلكترونية التي تنتقل من HTTP إلى HTTPS باستخدام عنوان Strict-Transport-Security عند تلقّي طلب عبر HTTP.

Strict-Transport-Security: max-age=31536000

المتصفحات المعتمدة

التوافق مع المتصفح

  • 4
  • 12
  • 4
  • 7

المصدر

مزيد من المعلومات

محتوى إضافي للقراءة