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

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

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

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

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

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

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

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

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

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

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

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

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

تطوير الويب بعد Spectre هو مقالة رائعة إذا كنت مهتمًا بهذه العناوين.

إنشاء موقع إلكتروني فعّال وآمن

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

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

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

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

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

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

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

ننصحك بتفعيل ميزة "سياسة الخدمة المحدودة" باستخدام إحدى الطريقتَين التاليتَين:

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

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

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

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

إذا كنت تعرض صفحات HTML على الخادم، استخدِم بروتوكول CSP صارمًا يستند إلى مفتاح عشوائي.

أنشئ قيمة جديدة لرمز مميّز لنص برمجي لكل طلب من جهة الخادم واضبط العنوان التالي:

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

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 الصارمة المستندة إلى مفتاح nonce. استخدِم أدوات المطوّرين لمعرفة كيفية استخدامها.

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 كعنوان من جهة الخادم، يمكنك أيضًا ضبطها كعلامة وصفية. يُرجى العِلم أنّه لا يمكنك استخدام وضع التقارير فقط للعلامات الوصفية (مع أنّه قد يتغيّر هذا الوضع).

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

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

هجوم XSS المستنِد إلى DOM هو نوع من هجمات التي يتم فيها تمرير بيانات ضارة إلى عنصر Sink يتيح تنفيذ رمز متغيّر، مثل 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. فرض Trusted Types على مصادر 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 خطيرة مع سلسلة إلى حدوث خطأ.

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

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

X-Content-Type-Options

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

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

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

X-Content-Type-Options: nosniff

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

X-Content-Type-Options: nosniff

مثال على الرؤوس المُرسَلة مع مستند HTML

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

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

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

  • Chrome: 64
  • الحافة: 12.
  • Firefox: 50
  • ‫Safari: 11

المصدر

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

X-Frame-Options

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

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

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

X-Frame-Options: DENY

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

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

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

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

X-Frame-Options: DENY
X-Frame-Options: DENY

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

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

X-Frame-Options: SAMEORIGIN

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

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

  • Chrome: 4.
  • Edge: 12.
  • ‫Firefox: 4.
  • Safari: 4.

المصدر

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

سياسة الموارد المشتركة المصدر (CORP)

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

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

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

Cross-Origin-Resource-Policy: same-origin

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

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

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

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

Cross-Origin-Resource-Policy: cross-origin
Cross-Origin-Resource-Policy: cross-origin

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

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

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

Cross-Origin-Resource-Policy: same-origin
Cross-Origin-Resource-Policy: same-origin

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

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

Cross-Origin-Resource-Policy: same-site
Cross-Origin-Resource-Policy: same-site

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

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

  • Chrome: 73
  • ‫Edge: 79
  • Firefox: 74
  • Safari: 12

المصدر

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

السياسة المحدّدة لفتح المستندات المشتركة المصدر (COOP)

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

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

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

Cross-Origin-Opener-Policy: same-origin-allow-popups

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

عزل مستند عن النوافذ التي لها مصادر متعددة

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

Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Opener-Policy: same-origin

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

يسمح الإعداد same-origin-allow-popups للمستند بالاحتفاظ بإشارة إلى النوافذ المنبثقة ما لم يتم ضبط سياسة التعاون مع الأطفال باستخدام 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 هي القيمة التلقائية، ولكن يمكنك الإشارة صراحةً إلى أنّه يمكن فتح هذا المستند من خلال نافذة من مصدر خارجي مع الاحتفاظ بالوصول المتبادل.

Cross-Origin-Opener-Policy: unsafe-none
Cross-Origin-Opener-Policy: unsafe-none

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

يمكنك تلقّي التقارير عندما تمنع سياسة مشاركة المعلومات (COOP) التفاعلات بين النوافذ باستخدام Reporting API.

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

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

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

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

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

  • Chrome: 83
  • ‫Edge: 83
  • Firefox: 79.
  • Safari: الإصدار 15.2.

المصدر

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

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

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

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

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

Access-Control-Allow-Origin: https://example.com
Access-Control-Allow-Credentials: true

قبل النظر في كيفية ضبط 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 ثانية.

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

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

  • Chrome: 4.
  • Edge: 12.
  • Firefox: 3.5
  • Safari: 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 قيمة واحدة هي require-corp. ومن خلال إرسال هذا العنوان، يمكنك أن تطلب من المتصفّح حظر تحميل الموارد التي لا تسمح بذلك من خلال CORS أو CORP.

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

يمكنك تجربة تأثير الإعدادات التالية في تحميل الموارد على هذا عرض توضيحي. غيِّر القائمة المنسدلة Cross-Origin-Embedder-Policy، والقيمة في المربّع بجانب Report Only (الإبلاغ فقط)، والقائمة المنسدلة Cross-Origin-Resource-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 باستخدام Reporting API.

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

تتيح لك ميزة "المعالجة المحدودة للبيانات" أيضًا استخدام وضع "التقارير فقط" حتى تتمكّن من تلقّي التقارير بدون حظر تحميل الموارد.

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

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

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

  • Chrome: 83
  • الحافة: 83.
  • Firefox: 79
  • ‫Safari: 15.2

المصدر

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

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

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

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

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

Strict-Transport-Security: max-age=31536000

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

Strict-Transport-Security: max-age=31536000

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

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

  • Chrome: 4.
  • Edge: 12.
  • ‫Firefox: 4.
  • Safari: 7

المصدر

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

مراجع إضافية