يمكنك إدارة طريقة وصول صفحتك وإطارات iframe التابعة لجهات خارجية على صفحتك إلى ميزات المتصفّح.
تتيح سياسة الأذونات، المعروفة سابقًا باسم "سياسة الميزات"، للمطوّرين التحكم في ميزات المتصفح المتاحة لإحدى الصفحات وإطارات iframe الخاصة بها من خلال الإعلان عن مجموعة من السياسات التي يجب أن يفرضها المتصفّح. هذه يتم تطبيق هذه السياسات على المصادر المقدّمة في قائمة مصادر عناوين الاستجابة. يمكن أن تحتوي قائمة المصادر على المصادر نفسها و/أو مصادر متعددة، كما تسمح بذلك. للمطوّرين التحكّم في إمكانية وصول الطرف الأول والطرف الثالث إلى ميزات المتصفّح.
لدى المستخدم القرار النهائي بالسماح بالوصول إلى ميزات أكثر فعالية، وعليه تقديم إذن صريح عبر طلب.
تسمح سياسة الأذونات لموقع المستوى الأعلى بتحديد ما الأطراف المعنية استخدامها، وتزيل العبء من المستخدم عن تحديد ما إذا كان طلب الوصول إلى الميزة مشروعًا أم لا. على سبيل المثال، من خلال تحظر ميزة رصد الموقع الجغرافي لجميع الجهات الخارجية عبر سياسة الأذونات، يمكن للمطور التأكد من أنه لن يتمكن أي جهة خارجية من الدخول إلى حسابات رصد الموقع الجغرافي
التغييرات على سياسة الأذونات
كانت سياسة الأذونات تُعرف سابقًا باسم "سياسة الميزات". تظل المفاهيم الرئيسية كما هي، لكن هناك بعض التغييرات المهمة إلى جانب الاسم.
استخدام الحقول المنظَّمة
توفّر الحقول المنظَّمة مجموعة من بُنى البيانات الشائعة لتوحيد تحليل وتسلسل قيم حقول عنوان HTTP. يمكنك الاطّلاع على مزيد من المعلومات عن "الحقول المنظَّمة" من مشاركة المدونة "تحسين HTTP باستخدام حقول العناوين المنظَّمة" على مدونة Fastly.
geolocation 'self' https://example.com; camera 'none'
قبل سياسة الميزات.
geolocation=(self "https://example.com"), camera=()
الآن مع سياسة الأذونات.
دمج العناوين مع سمة iframe allow
باستخدام سياسة الميزات، يمكنك إضافة الميزة إلى إطار من مصادر متعددة إما عن طريق إضافة المصدر إلى قائمة مصادر العنوان أو إضافة سمة allow
إلى علامة iframe. وفقًا لسياسة الأذونات، إذا أضفت إطارًا من مصادر متعددة إلى قائمة المصادر، يجب أن تتضمّن علامة iframe لهذا المصدر السمة allow
.
إذا لم تتضمّن الاستجابة عنوانًا لسياسة الأذونات، تُعتبر قائمة المصادر تحتوي على القيمة التلقائية *
. وتتيح إضافة السمة allow
إلى إطار iframe إمكانية الوصول إلى الميزة.
وبالتالي، ننصح المطوّرين بضبط عنوان "سياسة الأذونات" صراحةً في الاستجابة، ليتم حظر وصول إطارات iframe من مصادر متعددة غير المُدرَجة في قائمة المصادر إلى هذه الميزة، حتى في حال توفُّر allow
.
لا يزال من الممكن استخدام سياسة الميزات بعد الإصدار 88 من Chrome، ولكنها تعمل كاسم مستعار لسياسة الأذونات. بخلاف الصيغة، لا يوجد اختلاف في المنطق. في حال استخدام كل من عنوانَي "سياسة الأذونات" و"سياسة الميزات" معًا، سيكون لعنوان Permissions-Policy
أولوية أعلى، وسيتم استبدال القيمة المقدّمة في العنوان Feature-Policy
.
كيف يمكنني استخدام "سياسة الأذونات"؟
نظرة عامة سريعة
قبل التعمّق في التفاصيل، دعونا نلقي نظرة سريعة على سيناريو شائع وأنت مالك موقع إلكتروني وتريد التحكّم في كيفية استخدام موقعك الإلكتروني ورمز الجهة الخارجية لميزات المتصفّح.
- موقعك الإلكتروني هو
https://your-site.example
. - يضمِّن موقعك الإلكتروني إطار iframe من المصدر نفسه (
https://your-site.example
). - يضمِّن موقعك الإلكتروني إطار iframe من
https://trusted-site.example
تثق به. - يعرض موقعك الإلكتروني أيضًا إعلانات تعرضها "
https://ad.example
". - إذا كنت تريد السماح بتحديد الموقع الجغرافي لموقعك الإلكتروني والموقع الموثوق به فقط، وليس للإعلان.
وفي هذه الحالة، استخدِم رأس الصفحة التالي:
Permissions-Policy: geolocation=(self "https://trusted-site.example")
اضبط السمة allow
بشكل صريح على علامة iframe للموقع الموثوق به:
<iframe src="https://trusted-site.example" allow="geolocation">
في هذا المثال، تتيح قائمة أصول العنوان فقط لموقعك الإلكتروني (self
) وtrusted-site.example
استخدام ميزة الموقع الجغرافي. لا يُسمح لتطبيق ad.example
باستخدام ميزة رصد الموقع الجغرافي.
- يُسمح لموقعك الإلكتروني
your-site.example
باستخدام ميزة رصد الموقع الجغرافي بموافقة المستخدم. - يُسمَح لإطار iframe نفسه المصدر (
your-site.example
) باستخدام الميزة بدون استخدام السمةallow
. - إنّ إطار iframe المعروض من نطاق فرعي مختلف (
subdomain.your-site-example
) لم تتم إضافته إلى قائمة المصادر ويحتوي على سمة "السماح" التي تم ضبطها على علامة iframe، يُحظر استخدام هذه الميزة. وتُعتبر النطاقات الفرعية المختلفة موقعًا إلكترونيًا واحدًا ولكن من مصدر آخر. - إنّ إطار iframe من مصادر متعددة (
trusted-site.example
) تمت إضافته إلى قائمة المصادر وتم ضبطه على السمةallow
على علامة iframe ويُسمح باستخدام هذه الميزة. - يتم حظر إطار iframe من مصادر متعددة (
trusted-site.example
) تمت إضافته إلى قائمة المصادر بدون السمةallow
، من استخدام الميزة. - إنّ إطار iframe من مصادر متعددة (
ad.example
) لم تتم إضافته إلى قائمة المصادر يُحظر استخدامه، حتى في حال تضمين سمةallow
في علامة iframe.
عنوان استجابة HTTP Permissions-Policy
Permissions-Policy: <feature>=(<token>|<origin(s)>)
يمكنك استخدام عنوان Permissions-Policy
في الاستجابة من الخادم لضبط المصادر المسموح بها لإحدى الميزات. يمكن أن تأخذ قيمة العنوان مجموعة من الرموز المميّزة وسلاسل المصادر. الرموز المميّزة المتوفّرة هي *
لكل المصادر وself
للمصدر نفسه.
إذا كان الرأس يتعلق بميزات متعددة، فافصل بين الميزات بفاصلة. في حال إدراج عدّة مصادر، عليك الفصل بين كل مصدر في قائمة المصادر بمسافة. بالنسبة إلى العناوين التي تسرد مصدرًا هو طلب من مصادر متعددة، يجب أن تتضمّن علامة iframe السمة allow
.
في ما يلي بعض الأمثلة على أزواج المفتاح/القيمة:
- البنية:
[FEATURE]=*
- السياسة المطبّقة على جميع المصادر
- مثلاً:
geolocation=*
- البنية:
[FEATURE]=(self)
- السياسة المطبّقة على المصدر نفسه
- مثلاً:
geolocation=(self)
- البنية:
[FEATURE]=(self [ORIGIN(s)])
- السياسة التي يتم تطبيقها على المصدر نفسه والمصادر المحدّدة
- مثلاً:
geolocation=(self "https://a.example" "https://b.example")
self
هو اختصار للمصطلحhttps://your-site.example
- البنية:
[FEATURE]=([ORIGIN(s)])
- السياسة التي يتم تطبيقها على المصدر نفسه والمصادر المحدّدة
- مثلاً:
geolocation=("https://your-site.example" "https://a.example" "https://b.example")
- عند استخدام هذه البنية، يجب أن يكون أحد المصادر هو أصل أداة التضمين. إذا لم تحصل صفحة التضمين نفسها على الأذونات، سيتم أيضًا حظر إطارات iframe المضمَّنة في تلك الصفحة على الرغم من إضافتها إلى قائمة المصادر، وذلك لأنّ سياسة الأذونات تفوّض الأذونات. يمكنك أيضًا استخدام الرمز المميّز
self
.
- البنية:
[FEATURE]=()
- تم حظر الميزة في جميع المصادر.
- مثلاً:
geolocation=()
النطاقات الفرعية والمسارات المختلفة
تُعتبر النطاقات الفرعية المختلفة، مثل https://your-site.example
وhttps://subdomain.your-site.example
، موقعًا إلكترونيًا واحدًا ولكن من مصادر متعددة. وبالتالي، لن تسمح إضافة نطاق فرعي في قائمة المصادر بالوصول إلى نطاق فرعي آخر على الموقع الإلكتروني نفسه. يجب إضافة كل نطاق فرعي مضمّن يريد استخدام الميزة بشكل منفصل إلى قائمة المصادر. على سبيل المثال، إذا كان يُسمح بالوصول إلى مواضيع التصفّح الخاصة بالمستخدم من المصدر نفسه فقط باستخدام العنوان Permissions-Policy: browsing-topics=(self)
، لن يتمكّن إطار iframe من نطاق فرعي مختلف للموقع الإلكتروني نفسه، https://subdomain.your-site.example
، من الوصول إلى المواضيع.
تُعتبر المسارات المختلفة، مثل https://your-site.example
وhttps://your-site.example/embed
، مصدرًا واحدًا، ولا يجب إدراج المسارات المختلفة في قائمة المصادر.
سمة allow
في إطار iframe
للاستخدام من مصادر متعددة، يحتاج إطار iframe إلى السمة allow
في العلامة ليتمكّن من الوصول إلى الميزة.
البنية: <iframe src="[ORIGIN]" allow="[FEATURE] <'src' | [ORIGIN(s)]"></iframe>
على سبيل المثال:
<iframe src="https://trusted-site.example" allow="geolocation">
التعامل مع التنقّل في إطار iframe
إذا انتقل إطار iframe إلى مصدر آخر تلقائيًا، لا يتم تطبيق السياسة على المصدر الذي ينتقل إليه إطار iframe. من خلال إدراج المصدر الذي ينتقل إليه إطار iframe في السمة allow
، سيتم تطبيق سياسة الأذونات التي تم تطبيقها على إطار iframe الأصلي على المصدر الذي ينتقل إليه إطار iframe.
<iframe src="https://trusted-site.example" allow="geolocation https://trusted-site.example https://trusted-navigated-site.example">
يمكنك الاطّلاع عليها أثناء التنفيذ من خلال الانتقال إلى العرض التوضيحي للتنقّل في iframe.
أمثلة على عمليات إعداد سياسة الأذونات
يمكن العثور على أمثلة على عمليات الإعداد التالية في العرض التوضيحي.
هذه الميزة مسموح بها في جميع المصادر.
Permissions-Policy: geolocation=*
<iframe src="https://trusted-site.example" allow="geolocation">
<iframe src="https://ad.example" allow="geolocation">
عند ضبط قائمة المصادر على الرمز المميّز *
، يتم السماح باستخدام هذه الميزة في جميع المصادر المتوفّرة على الصفحة، بما في ذلك الصفحة نفسها وجميع إطارات iframe. في هذا المثال، يمكن لكل الرموز التي يتم عرضها من خلال https://your-site.example
والرموز التي يتم عرضها من خلال https://trusted-site.example
iframe وhttps://ad.example
الوصول إلى ميزة رصد الموقع الجغرافي في متصفّح المستخدم. تذكَّر أنّه يجب أيضًا ضبط سمة "allow" على إطار iframe نفسه مع إضافة المصدر إلى قائمة مصادر العنوان.
يمكنك الاطّلاع على هذا الإعداد في العرض التوضيحي.
يُسمح بالميزة من المصدر نفسه فقط.
Permissions-Policy: geolocation=(self)
ويؤدي استخدام الرمز المميز self
إلى السماح باستخدام رصد الموقع الجغرافي للمصدر نفسه فقط. لن تتمكن الجهات الخارجية من الوصول إلى الميزة. في هذا المثال، سيتم منح إذن الوصول إلى بيانات الموقع الجغرافي لـ "https://trusted-site.example
" (self
) فقط. يمكنك استخدام هذه البنية إذا كنت تريد إضافة الميزة إلى صفحتك فقط وليس لشخص آخر.
يمكنك الاطّلاع على هذا الإعداد في العرض التوضيحي.
تتوفّر الميزة على المصدر نفسه ومصادر محدّدة من مصادر متعددة.
Permissions-Policy: geolocation=(self "https://trusted-site.example")
تتيح هذه البنية استخدام ميزة رصد الموقع الجغرافي على كلّ من الذات (https://your-site.example
) وhttps://trusted-site.example
. تذكر أن تضيف سمة "السماح" بشكل صريح إلى علامة iframe. إذا كان هناك إطار iframe آخر مع <iframe src="https://ad.example" allow="geolocation">
، لن يتمكّن https://ad.example
من الوصول إلى ميزة رصد الموقع الجغرافي. يمكن فقط للصفحة الأصلية وhttps://trusted-site.example
المُدرَجين في قائمة المصادر مع تضمين سمة "السماح" في علامة iframe الوصول إلى ميزة المستخدم.
يمكنك الاطّلاع على هذا الإعداد في العرض التوضيحي.
تم حظر الميزة في جميع المصادر.
Permissions-Policy: geolocation=()
إذا كانت قائمة المصادر فارغة، سيتم حظر هذه الميزة لجميع المصادر. يمكنك الاطّلاع على هذا الإعداد في العرض التوضيحي.
استخدام JavaScript API
يمكن العثور على واجهة برمجة تطبيقات JavaScript الحالية الخاصة بسياسة الميزات كعنصر في المستند أو العنصر (document.featurePolicy or element.featurePolicy
). لم يتم تنفيذ JavaScript API لسياسة الأذونات بعد.
يمكن استخدام واجهة برمجة التطبيقات Feature Policy API للسياسات التي تم ضبطها بواسطة سياسة الأذونات، مع تطبيق بعض القيود. هناك أسئلة متبقية بخصوص تنفيذ واجهة برمجة تطبيقات JavaScript، وتم تقديم اقتراح لنقل المنطق إلى Permissions API. انضم إلى المناقشة إذا كانت لديك أي أفكار.
featurePolicy.allowsFeature(feature)
- تعرض
true
في حال السماح باستخدام الميزة لاستخدام المصدر التلقائي. - ينطبق السلوك نفسه لكل من السياستين اللتين تم ضبطهما من خلال سياسة الأذونات وسياسة الميزات السابقة.
- عند استدعاء
allowsFeature()
على عنصر iframe (iframeEl.featurePolicy.allowsFeature('geolocation')
)، تعكس القيمة المعروضة ما إذا تم ضبط سمة Allow على إطار iframe.
featurePolicy.allowsFeature(feature, source)
- تعرض
true
إذا كانت الميزة مسموحًا بها للمصدر المحدّد. - إذا تم استدعاء هذه الطريقة في
document
، لن توضّح هذه الطريقة ما إذا كانت الميزة مسموحًا بها للمصدر المحدَّد كما فعلت سياسة الميزات. أمّا الآن، فتشير هذه الطريقة إلى أنّه من الممكن السماح باستخدام الميزة في هذا المصدر. عليك إجراء تحقّق إضافي لمعرفة ما إذا كان إطار iframe يتضمّن مجموعة السمةallow
أم لا. يجب أن يُجري مطوّر البرامج فحصًا إضافيًا للسمةallow
على عنصر iframe لتحديد ما إذا كان يُسمح بهذه الميزة للمصدر التابع لجهة خارجية.
التحقّق من الميزات في إطار iframe باستخدام الكائن element
يمكنك استخدام السمة element.allowsFeature(feature)
التي تأخذ السمة المتاحة في الاعتبار على عكس السمة document.allowsFeature(feature, origin)
التي لا تأخذها في الاعتبار.
const someIframeEl = document.getElementById('some-iframe')
const isCameraFeatureAllowed = someIframeEl.featurePolicy.allowsFeature('camera')
featurePolicy.allowedFeatures()
- تعرض قائمة الميزات المسموح بها لاستخدام المصدر التلقائي.
- يتم تطبيق السلوك نفسه على السياستَين اللتَين تم ضبطهما من خلال سياسة الأذونات وسياسة الميزات.
- عندما تكون العقدة المرتبطة ضمن إطار iframe، تتم مراعاة سمة "السماح".
featurePolicy.features()
- عرض قائمة الميزات المتاحة في المتصفح.
- يتم تطبيق السلوك نفسه على السياستَين اللتَين تم ضبطهما من خلال سياسة الأذونات وسياسة الميزات.
دمج "أدوات مطوري البرامج في Chrome"
يمكنك الاطّلاع على طريقة عمل سياسة الأذونات في "أدوات مطوّري البرامج".
- افتح "أدوات مطوري البرامج في Chrome".
- افتح لوحة التطبيق للتحقّق من الميزات المسموح بها والميزات غير المسموح بها في كل إطار.
- في الشريط الجانبي، اختَر الإطار الذي تريد فحصه. ستظهر لك قائمة بالميزات المسموح للإطار المحدّد باستخدامها وقائمة بالميزات المحظورة في هذا الإطار.
نقل البيانات من سياسة الميزات
إذا كنت تستخدم حاليًا عنوان Feature-Policy
، يمكنك تنفيذ الخطوات التالية لنقل البيانات إلى "سياسة الأذونات".
استبدال عناوين سياسة الميزات بعناوين سياسة الأذونات
بما أنّ عناوين "سياسة الميزات" لا تتوفّر إلا في المتصفِّحات المستنِدة إلى Chromium، وعناوين "سياسة الأذونات" متاحة منذ الإصدار 88 من Chrome، من الآمن تعديل العناوين الحالية باستخدام "سياسة الأذونات".
Feature-Policy: autoplay *; geolocation 'self'; camera 'self' 'https://trusted-site.example'; fullscreen 'none';
قبل سياسة الميزات.
Permissions-Policy: autoplay=*, geolocation=(self), camera=(self "https://trusted-site.example"), fullscreen=()
الآن مع سياسة الأذونات.
تعديل استخدام document.allowsFeature(feature, origin)
إذا كنت تستخدم طريقة document.allowsFeature(feature, origin)
للتحقّق من الميزات المسموح بها لإطارات iframe، يمكنك استخدام طريقة allowsFeature(feature)
المرفقة في عنصر iframe، وليس في document
الذي يتضمّن العنصر. تستخدم الطريقة element.allowsFeature(feature)
السمة "Allow" في الاعتبار، على عكس document.allowsFeature(feature, origin)
.
جارٍ التأكّد من إمكانية استخدام الميزات من خلال "document
"
لمواصلة استخدام document
كعقدة أساسية، عليك إجراء عملية تحقّق إضافية للسمة allow
على علامة iframe.
<iframe id="some-iframe" src="https://example.com" allow="camera"></iframe>
Permissions-Policy: camera=(self "https://example.com")
const isCameraPolicySet = document.featurePolicy.allowsFeature('camera', 'https://example.com')
const someIframeEl = document.getElementById('some-iframe')
const hasCameraAttributeValue = someIframeEl.hasAttribute('allow')
&& someIframeEl.getAttribute('allow').includes('camera')
const isCameraFeatureAllowed = isCameraPolicySet && hasCameraAttributeValue
بدلاً من تعديل الرمز الحالي باستخدام document
، ننصح بطلب allowsFeature()
في الكائن element
مثل المثال السابق.
Reporting API
توفّر Reporting API آلية للإبلاغ عن تطبيقات الويب بطريقة متّسقة، وتتوفّر واجهة Reporting API المتعلّقة بانتهاكات سياسة الأذونات كميزة تجريبية.
إذا كنت تريد اختبار الميزة التجريبية، يُرجى اتّباع جولة تفصيلية وتفعيل العلامة في "chrome://flags/#enable-experimental-web-platform-features
". من خلال تفعيل العلامة، يمكنك ملاحظة انتهاكات "سياسة الأذونات" في "أدوات مطوري البرامج" ضمن علامة التبويب "التطبيق":
يوضّح المثال التالي كيفية إنشاء عنوان Reporting API:
Reporting-Endpoints: main-endpoint="https://reports.example/main", default="https://reports.example/default"
Content-Security-Policy: script-src 'self'; object-src 'none'; report-to main-endpoint;
Document-Policy: document-write=?0; report-to=main-endpoint;
في عملية التنفيذ الحالية، يمكنك تلقّي تقارير انتهاك السياسات من أي انتهاكات تحدث ضمن ذلك الإطار من خلال ضبط نقطة نهاية باسم "تلقائي". مثل المثال أعلاه. ستتطلب الإطارات الفرعية ضبط إعداداتها الخاصة لإعداد التقارير.
التعرف على المزيد
للحصول على فهم أعمق لسياسة الأذونات، يمكنك الاطّلاع على المراجع التالية: