FreeToGenerate.com

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

جرّب واحدًا:

الرموز الثلاثة عشر

هذه كل القيم التي يسمح بها معيار HTML، بالترتيب الذي يسردها به. وما عداها ليس رمزًا للـsandbox مهما بدا معقولًا.

من أين تأتي الصفحة المؤطَّرة؟

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

السمة

<iframe sandbox="allow-forms allow-same-origin allow-scripts" src="..."></iframe>

ما الذي يفعله هذا التركيب

لا شيء يُذكر: ترميز مطابق، ولا رمز خامل، ولا منفذ للخروج من الـsandbox.

إن كان هذا الإطار نفسه داخل sandbox

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

اتركه فارغًا إن كان هذا الإطار في صفحة عليا.

كل شيء يجري داخل متصفحك. ولا يُرفع شيء مما تكتبه.

متوفر أيضًا بلغات أخرى: English · Español · Português · Français

سمة sandbox في iframe: ابنِها واقرأ ما تفعله فعلًا

الرموز الثلاثة عشر، والقواعد الأربع للجمع بينها، والشرط الذي يسقطه الجميع من التحذير الشهير.

ما سمة sandbox في iframe؟

سمة sandbox تُخضع محتوى الـiframe لمجموعة قيود إضافية. اكتبها بلا قيمة تنَل الصفحة المؤطَّرة أشدّ معاملة ممكنة: فلا تعمل النصوص البرمجية، ولا تُرسَل النماذج، وتُحجب النوافذ المنبثقة والحوارات، ويُعامَل المحتوى كأنه قادم من أصل مبهم فريد، فلا يصل إلى شيء مما عندك. وكل رمز تضيفه يعيد واحدة من تلك القدرات.

والرموز ثلاثة عشر بالضبط، يسردها معيار HTML في جملة واحدة. وهذا أهم مما يبدو: فالمتصفحات تتجاهل قيم السمات التي لا تعرفها، فالاختراع المعقول لا يمنح شيئًا ولا يُبلّغ عن شيء. والقيمة كذلك مجموعة رموز فريدة غير مرتّبة، لا تفرّق بين حالتي الأحرف في ASCII: فالترتيب لا يهمّ أبدًا، وALLOW-SCRIPTS هي allow-scripts نفسها، وكتابة الرمز مرتين غير مطابقة وإن لم تغيّر شيئًا.

وهذا الباني يؤشّر على الرموز، ويكتب السمة، ثم يقرأ عليك التركيب — وهو تحديدًا ما تُغفله قوائم المربّعات في غيره، لأن عدة قواعد تتحدث عن رموز يتفاعل بعضها مع بعض لا عن رموز مفردة.

طريقة الاستعمال

  1. أشّر على القدرات التي يحتاجها المحتوى حقًا. لكل رمز سطر يشرح ما يعيد تمكينه، وبعد تحميل الصفحة ملاحظة تقول هل يعرفه متصفحك أنت. وأزرار الأمثلة تُحمّل خمس حالات حقيقية، منها مثال المواصفة نفسها.
  2. حدّد من أين تأتي الصفحة المؤطَّرة. من الأصل نفسه، أو من أصل مختلف، أو لا تستطيع الضمان. وهذا هو السؤال الذي يقرّر هل يعنيك التحذير الشهير بشأن allow-scripts مع allow-same-origin، وهو الشيء الوحيد الذي لا سبيل لمدقّق أن يعرفه.
  3. اقرأ النتائج ثم انسخ الوسم. والنتائج أربعة أنواع: ترميز غير مطابق، ومنفذ للخروج من الـsandbox، ورموز لا تفعل شيئًا في هذا التركيب، وملاحظات مجردة. وإن كان إطارك داخل إطار آخر عليه sandbox، فالصق سمة ذلك الإطار في خانة التداخل لترى ما الذي يبقى.

التحذير الذي يردّده الجميع، والشرط الذي يسقطونه

النصيحة التي سمعتها هي: لا تجمع أبدًا بين allow-scripts وallow-same-origin. أما ما يقوله المعيار فهو أن الجمع بينهما «حين تكون الصفحة المضمّنة من أصل الصفحة الحاوية للـiframe نفسه يتيح للصفحة المضمّنة أن تحذف سمة sandbox ببساطة ثم تعيد تحميل نفسها، فتخرج من الـsandbox بالكامل».

والشرط الأوسط هو حامل المعنى. فالإفلات ليس سحرًا: بل هو أن نصًّا برمجيًا من الأصل نفسه داخل الإطار يستطيع الوصول إلى المستند الحاوي له فيحذف السمة ويعيد التحميل. أما صفحة من أصل آخر فلا تمسّ ذلك المستند أصلًا، فلا سبيل لها إلى الحيلة. ومثال المواصفة نفسها إطارٌ قيمة sandbox فيه allow-same-origin وallow-forms وallow-scripts حول خريطة من طرف ثالث، وتصف ذلك الـsandbox بأنه «لا يزال مفيدًا» لأن النوافذ المنبثقة والإضافات تبقى محجوبة.

فالقاعدة الصادقة أضيق وأنفع من الصيغة الشائعة: الزوج بابُ خروج حين تؤطّر شيئًا تقدّمه أنت، وإعدادٌ معقول حين تؤطّر أصل غيرك. وإن لم تستطع ضمان أيّهما — فإعادة التوجيه قد تنقل عنوانًا من أصل آخر إلى أصلك — فالأولى افتراض أن الإفلات متاح، وهذا بعينه سبب تحذير مدقّق W3C من الزوج بلا شرط. فهو افتراض سليم، لا حكمٌ على حالتك.

القواعد التي لا تخبرك بها قائمة مربّعات

هناك تركيبان ليسا ترميزًا مطابقًا. فـallow-top-navigation وallow-top-navigation-by-user-activation لا يجوز ذكرهما معًا لأن ذلك تكرار: فلا أثر إلا لغير المشروط منهما. وallow-top-navigation-to-custom-protocols لا يجوز ذكره مع allow-top-navigation ولا مع allow-popups، للسبب نفسه. وبإرسال الحالتين إلى مدقّق Nu التابع لـW3C، يعود الأول خطأً ولا يقول عن الثاني شيئًا البتة، في أيّ من صيغتيه — أي أن إحدى القاعدتين لا تطبّقها الأداة التي يتحقق بها معظم الناس.

وهناك كذلك رمزان قد يكونان خاملين تمامًا. فـallow-modals لا يفعل شيئًا وحده: يقول المعيار إن alert وconfirm وprompt تحتاج allow-modals وallow-same-origin معًا، وأن يكون العنوان المحمَّل من أصل الصفحة العليا نفسه. وallow-popups-to-escape-sandbox يحكم ما ترثه نافذة يفتحها المحتوى، فبلا allow-popups لا نافذة ليحكمها. وليس أيٌّ منهما خطأً، فلا مدقّق يذكرهما: يبقى عندك رمز يبدو كأنه يفعل شيئًا.

والتداخل لا يزيد إلا ضيقًا. تعمل المواصفة مثالًا تؤطّر فيه صفحةٌ أخرى بـallow-same-origin وallow-forms، وتؤطّر تلك ثالثةً بـallow-scripts: فلا تنال الأعمق شيئًا، لأن «الإطار في A النصوص البرمجية فيه معطّلة، وهذا يغلب كلمة allow-scripts الموضوعة على الإطار في B». فالإطار الداخلي يضيّق ما أُعطي؛ ولا يعيد أبدًا ما حجبه إطار خارجي.

وأخيرًا، تثبت الأعلام عند التصفّح. «هذه الأعلام لا تسري إلا حين يُتصفَّح content navigable الخاص بعنصر iframe. وإزالتها، أو إزالة سمة sandbox كلها، لا أثر له على صفحة محمَّلة سلفًا.» فتغيير السمة برمجيًا لا يفعل شيئًا حتى يُعاد التحميل، ولهذا لا ينصح المعيار بفعله.

حدود معلنة

هذه الأداة تقرأ سمة؛ ولا تدقّق صفحة. فهي لا ترى سياسة Content-Security-Policy عندك، وهي قادرة على فرض sandbox خاص بها عبر توجيه sandbox، ولا ترى سمة allow، وهي آلية منفصلة تحكم الأذونات لا القيود. وهي كذلك تأخذ بقولك عن أصل الصفحة المؤطَّرة، لأنه السبيل الوحيد لمعرفته سلفًا.

وملاحظة الدعم لكل رمز مصدرها سؤال متصفحك مباشرة. فالمعيار يعرّف الرموز المدعومة لهذه السمة بأنها القيم المسموحة «التي يدعمها وكيل المستخدم»، وهذا ما يجعل السؤال قابلًا للإجابة — لكنها تخبرك بما سيحلّله المتصفح لا بما سيلتزم به، والمحرك القديم جدًا الذي لا يعرض قائمة رموز مدعومة لا يجيب ببساطة.

وثمة أمر يستحق القول صراحةً: الـsandbox ليس بديلًا عن ألا تقدّم محتوى معاديًا من أصلك أنت. يقول المعيار ذلك في القسم نفسه، والسبب أن من يُقنع أحدًا بفتح العنوان المؤطَّر مباشرةً ينال ذلك العنوان بلا sandbox، وفي أصلك، ودون إطار أصلًا.

لماذا هي مجانية؟

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

ولا يُرفع شيء. والسمة التي تبنيها تبقى في هذه الصفحة وحدها.