Apache HTTPD / التمثيل والوكالة والسعة / الدرس 7
أنواع المحتوى والفهارس والمعالجات
افصل اختيار المورد ووصف الرد والتنفيذ والقائمة الآلية.
في هذه الصفحة
أهداف الدرس
- شرح نوع MIME وسلوك المعالج.
- مراجعة DirectoryIndex والقائمة كنتيجتين مختلفتين.
تختلف البيانات الوصفية والتنفيذ
قد يحمل المورد نوعاً وترميز حروف وضغطاً ومعالجاً ومرشحات. تربط mod_mime الامتداد ببيانات وسلوك وفق الإعداد وتختار وحدات أخرى المعالج. يحتاج status.json وصف JSON صحيحاً، لكن النوع لا يثبت البايتات أو ينفذ برنامجاً. لا تجعل الامتداد حد أمان. قد يكشف غياب المعالج مصدراً، فراجع مكان التنفيذ ومتطلباته. لا ينبغي وضع شيفرة خاصة تحت مسار عام على افتراض أن حروف اسمها وحدها تمنع تقديمها كنص عند تغير الوحدة أو الإعداد.
قد يختار طلب المجلد فهرساً أو قائمة
تعالج mod_dir الشرطة والفهرس، وتولد mod_autoindex قائمة حيث تنطبق. قد يحتاج /docs تحويلًا لتصحيح الروابط النسبية. قد تختار DirectoryIndex index.html بدلاً من القائمة. لا يلغي منع Indexes الفهرس أو كل مسار معروف. حدد النتيجة قبل الأذونات والملفات. يهم الفرق عند تفسير 403 لمجلد لا يحوي فهرساً، أو صفحة تظهر رغم تعطيل القائمة؛ ليست الحالتان دليلاً واحداً ولا تحتاجان بالضرورة التغيير نفسه في سياسة الوصول.
أعلن عقد محتوى ثابت واحداً
يحدد المثال فهرساً ويمنع القائمة ويصف JSON مع افتراض وحدات مناسبة، ولا يحمل أو ينشئ ملفاً أو يحلله Apache. ليس إعداداً عاماً؛ يهم الموروث والتفاوض واللغة والحروف والأقسام. يفترض محتوى عاماً مراجعاً لا أسراراً أو مصدراً يعتمد على التنفيذ للسرية. لا يثبت Require all granted صحة كل ملف فيه أو سلامة ما سيراه المستخدم. يجب أن يتأكد مالك المحتوى من أن اختيار النطاق العام نفسه مشروع قبل النظر إلى النوع أو الفهرس.
<Directory "/lab/parcel/public">
DirectoryIndex index.html
Options -Indexes
AddType application/json .json
Require all granted
</Directory>
المسار والمحتوى مفترضان. لا يختبر فهرساً أو MIME أو قائمة أو إذناً أو طلباً، ولا يضبط معالجاً ديناميكياً.
تحقق من الحمولة مستقلة عن اسمها
يحلل البرنامج نص JSON ويختار وصف امتداد مستقلًا؛ ينجح الاثنان بمعنيين مختلفين. ليس sniffing أو تفاوضاً أو تحقق ترويسة. يحتاج الواقع البايتات والبيانات الفعلية للمسار وسلامة التعامل مع رفع غير موثوق. لا يصحح تغيير الامتداد حمولة ولا يفوض النوع نشرها. يثبت المثال صحة نصه المضمن فقط، لذلك لا يجوز استعماله شهادة على ملف موجود على خادم لم يقرأه البرنامج أو على محتوى يعيده معالج قد يغيره وقت الطلب.
import json
payload = '{"service":"parcel-lab","ok":true}'
types = {".json": "application/json"}
value = json.loads(payload)
print(types[".json"])
print(value["ok"] is True)
application/json
True
يستخدم نصاً وقاموساً فقط دون ملف أو معالج أو ترويسة أو متصفح أو خادم.
تتبع التنزيل أو عرض المصدر المفاجئ
احفظ الموقع والمعالج والترويسات والمحتوى المحدود دون أسرار عند تنزيل أو ترميز أو عرض مصدر خاطئ. راجع الوحدة والتجاوز لا الاسم فقط. قد يخفي تعديل النوع مشكلة معالج ويترك المصدر مكشوفاً. قد يغير ErrorDocument والتحويل الداخلي المحتوى النهائي. افصل الحالة والتمثيل والمعالج والوصول وتحقق من المستخدم بمسار مصرح. لا تعالج ظهور شيفرة خاصة بتغيير شكل عرضها فقط؛ يجب أن يفهم المالك كيف وصلت إلى مسار قابل للتقديم وما الافتراض الذي لم يعد صحيحاً.
الأخطاء الشائعة وإصلاحها
يُتوقع تنفيذ التطبيق من نوع الوسائط.
- لماذا يحدث؟
- اختلط الوصف بالمعالج.
- كيف تصلحه؟
- راجع المعالج والتكامل المطلوب منفصلين.
- كيف تتجنب تكراره؟
- لا تفترض سرية مصدر تنفيذي داخل العام.
يُتوقع منع الفهرس بتعطيل Indexes.
- لماذا يحدث؟
- اختلطت القائمة واختيار الملف.
- كيف تصلحه؟
- افحص الطلب وسلوك الوحدة المقصود.
- كيف تتجنب تكراره؟
- افصل الشرطة والفهرس والقائمة والمباشر.
يُعد .json إثبات صحة وسلامة.
- لماذا يحدث؟
- حل الاسم محل المحتوى والتفويض.
- كيف تصلحه؟
- تحقق من البايتات والنشر مستقلة.
- كيف تتجنب تكراره؟
- راجع الرفع والوصف والسياسة كعقود.
اختبر فهمك
1. صح وصف .json في النموذج. هل كل status.json صحيح؟
اعرض الحل المشروح
لا. القاموس والمحلل مستقلان ويختبر النص المضمن فقط. تحتاج البايتات والترميز والسياسة دليلاً مناسباً ولا يثبتها الاسم.
2. ظهر index.html مع -Indexes. هل هذا خلل حتماً؟
اعرض الحل المشروح
لا. تختلف DirectoryIndex والقائمة. قد يقدم الفهرس الصحيح. حدد المطلوب والمعالج والتفويض قبل تغيير الوصول.
أهم ما تعلمته
- افصل النوع والمعالج والحمولة والوصول.
- يختلف الفهرس المحدد والقائمة المولدة.