انتقل إلى المحتوى
HexaTransfer
العودة إلى المدونة
التشفير والأمان

رؤوس الأمان لتطبيقات الويب: دليل الإعداد الكامل

هيئ رؤوس الأمان الأساسية لتطبيق نقل الملفات. CSP وHSTS وX-Frame-Options للحماية من هجمات الويب الشائعة.

رؤوس الأمان هي حقول استجابة HTTP تُخبر المتصفحات بكيفية تقييد سلوك الصفحة. لتطبيق نقل ملفات يُجري تشفير AES-256-GCM من جانب العميل، ثمة ستة رؤوس بالغة الأهمية: Strict-Transport-Security لإلزام HTTPS، وContent-Security-Policy لصد حقن السكريبت، وX-Frame-Options لمنع هجمات النقر الخادع، وReferrer-Policy لسد تسريبات شظايا URL، وPermissions-Policy لتعطيل واجهات برمجة المتصفح غير المستخدمة، وCross-Origin-Opener-Policy لعزل سياق التصفح. الإعداد الصحيح لهذه الرؤوس يصدّ 80% من الهجمات العملية على جانب العميل دون تعديل سطر واحد من JavaScript.

HSTS وقائمة الإدراج المسبق

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload يأمر المتصفحات بعدم الاتصال عبر HTTP العادي مجددًا لمدة عامين. يُؤهّلك التوجيه preload للإدراج في قائمة HSTS preload الخاصة بـ Chrome (hstspreload.org) التي تُشحن مع المتصفح؛ بذلك تسلك حتى أولى الطلبات إلى نطاقك عبر HTTPS، وتزول نافذة الهجوم الأولية على البروتوكول (MITM). الإدراج في هذه القائمة طريق بلا رجعة؛ إذ يستغرق الحذف منها أشهرًا. اختبر بـ max-age=300 لأيام قليلة قبل المضي قدمًا. خدمة نقل ملفات بدون HSTS preload تبقى على بُعد عملية اختطاف DNS واحدة من تقديم نموذج رفع مزيف.

سياسة أمان المحتوى التي تُحقق أهدافها فعلاً

CSP هو أصعب رأس يمكن نشره وأكثرها قيمة. تبدو سياسة صارمة لتطبيق نقل الملفات هكذا: default-src 'none'; script-src 'self' 'wasm-unsafe-eval'; connect-src 'self' https://upload.hexatransfer.com; style-src 'self'; img-src 'self' data:; font-src 'self'; frame-ancestors 'none'; base-uri 'none'; form-action 'self'. لا سكريبتات مدمجة، لا eval إلا لـ wasm، لا اتصالات بجهات خارجية. انقل معالجات الأحداث المدمجة إلى addEventListener في ملفات خارجية. التوجيه 'wasm-unsafe-eval' ضروري لـ libsodium.js؛ فبدونه لن يعمل Argon2id.

سلامة الموارد الفرعية على كل حزمة

إذا كانت JavaScript تُحمَّل من شبكة CDN كـ jsDelivr أو unpkg، أضف سمات integrity="sha384-..." على كل وسم سكريبت. سيرفض المتصفح تنفيذ السكريبتات التي لا تتطابق هاشاتها؛ فلا تستطيع شبكة CDN مخترقة دفع حزمة مخترقة بصمت. لسكريبتات مستضافة ذاتيًا، يظل SRI مدافعًا معقولًا وإن كان أقل إلحاحًا. اجمع SRI مع require-sri-for script style ضمن CSP أو فرّضه عبر خط أنابيب البناء. تنشر HexaTransfer هاشات لكل إصدار ليتمكن المستخدمون المتحفظون من التحقق يدويًا.

X-Frame-Options وعزل الإطارات

تُحمّل هجمات النقر الخادع (Clickjacking) صفحة الرفع في إطار iframe شفاف فوق صفحة أخرى، لتخدع المستخدم للنقر على "إرسال" لملف لم يقصده. X-Frame-Options: DENY يحظر كل تأطير؛ والبديل الحديث هو Content-Security-Policy: frame-ancestors 'none'. أرسل كليهما، إذ تعتمد المتصفحات القديمة على الرأس التقليدي فيما تُفضّل الحديثة CSP. لا تستخدم SAMEORIGIN لتطبيق نقل الملفات أبدًا؛ فلا مسوّغ لتأطير واجهة الرفع من صفحة أخرى.

Referrer-Policy لسد تسريبات الشظايا

تحذف المتصفحات شظايا URL (الجزء #key=... الذي يحوي مفتاح فك التشفير) من ترويسات Referer افتراضيًا، غير أن الجزء المتعلق بالمسار لا يزال يتسرب. Referrer-Policy: no-referrer يحجب كل معلومات المُحيل؛ لا ترويسة Referer في الروابط الصادرة، ولا تسريبات عابرة للأصول، ولا بصمات URL عبر أدوات التتبع الخارجية. لصفحة تنزيل على العنوان /d/7Kj9xQmN2vP8rBwLsE4fT#k=abc، هذا يمنع تسرب المعرّف إلى أي نطاق خارجي ينقر إليه المستخدم. اضبطه على مستوى الموقع عبر ترويسة لا تعتمد على rel="noreferrer" في كل رابط.

Permissions-Policy للدفاع متعدد الطبقات

إذا كان تطبيقك لا يستخدم الكاميرا أو الميكروفون أو تحديد الموقع أو USB، فاحظرها صراحةً: Permissions-Policy: camera=(), microphone=(), geolocation=(), usb=(), bluetooth=(), accelerometer=(), magnetometer=(), gyroscope=(), payment=(). حتى ثغرة XSS اخترقت CSP لن تستطيع تشغيل الويب كام لتصوير المستخدم. هذا الرأس سهل النشر ولا أثر له على تجربة المستخدم في سير عمل نقل الملفات، ويُشير إلى مراجعي الأمان أنك فكّرت مليًا في الحدود والعزل.

رؤوس العزل عبر الأصول

للوصول إلى المؤقتات عالية الدقة وSharedArrayBuffer (الضروريين لبعض تطبيقات تشفير wasm)، تشترط المتصفحات العزل عبر الأصول عبر Cross-Origin-Opener-Policy: same-origin وCross-Origin-Embedder-Policy: require-corp. تمنع هذه الرؤوس أيضًا هجمات Spectre الجانبية التي قد تُسرّب مفاتيح AES من أصول مجاورة. التبادل: تنكسر الموارد الخارجية كأشرطة YouTube ونوافذ Stripe ما لم تُقدّم Cross-Origin-Resource-Policy: cross-origin. لتطبيق نقل ملفات ذي غرض واحد بلا محتوى خارجي مضمّن، يأتي العزل بلا تكلفة.

Cache-Control للصفحات الحساسة

قد تعرض صفحة تأكيد التنزيل مفتاح فك تشفير قصير الأمد أو رمز جلسة. امنع التخزين المؤقت: Cache-Control: no-store, must-revalidate وPragma: no-cache. لا تكتفِ بـ no-cache؛ فهو يسمح بإعادة التحقق من الأصل، أي أن التخزين المؤقت لا يزال يقع. لحزمة JavaScript الخاصة بصفحة الرفع، ينعكس الأمر: max-age طويل مع أسماء ملفات مُعنوَنة بالمحتوى (مثل /js/main-a7b3c9.js) لتعمل ذاكرة CDN دون متاعب الإبطال. طبّق الترويسات باختيار دقيق لكل مسار.

X-Content-Type-Options وبصم أنواع MIME

X-Content-Type-Options: nosniff يمنع المتصفحات من تخمين أنواع MIME بناءً على المحتوى. بدونه، قد يُعرض ملف .txt رفعه مهاجم ويحتوي على <script> بتنسيق HTML عند إرجاعه. لخدمة نقل تُقدّم تنزيلات يتحكم فيها المستخدمون، اجمع nosniff مع Content-Disposition: attachment; filename="..." لإجبار المتصفح على التنزيل لا العرض. تحقق من الاسم المستعمل على الخادم للوقاية من اجتياز المسار (../../../etc/passwd).

الرصد وتقارير CSP

انشر CSP في وضع report-only أولًا، واجمع الانتهاكات في نقطة نهاية report-uri لأسبوع، ثم أصلح المشكلات المشروعة، وبعدها فرّض السياسة. استخدم Content-Security-Policy-Report-Only للرصد، وانتقل إلى Content-Security-Policy للتطبيق. تُرسل نقطة الإبلاغ نشرات JSON تصف كل انتهاك: URI المحظور، والتوجيه المنتهَك، والملف المصدر، ورقم السطر. تجمعها خدمات كـ Report URI أو Sentry المستضاف ذاتيًا. راجعها أسبوعيًا؛ تظهر الهجمات الحقيقية في صورة URIs محظورة غريبة لم تسبق رؤيتها.

تقييم مستوى الأداء

أخضع رابط الإنتاج لأداة securityheaders.com ومرصد Mozilla Observatory. الدرجة A أو A+ ليست كمالًا لكنها الحد الأدنى المقبول. معظم منافسي نقل الملفات يحصلون على درجة B أو أقل لأنهم ينسون Permissions-Policy أو يسمحون بـ 'unsafe-inline' في CSP. يمكن لخدمة صغيرة أن تتجاوز WeTransfer بسهولة في درجة رؤوس الأمان؛ فالرؤوس لا تكلف شيئًا، وحجة "لماذا لا تطبّق CSP الصارم" في محادثات مدققي SOC 2 تصبح أقصر حين تبدأ صارمًا منذ البداية.

جرّبها على hexatransfer.com — مجاني، بدون حساب، حتى 10 جيجابايت.

أرسل ملفات كبيرة بأمان مع تشفير من طرف إلى طرف

انقل ملفات حتى 10 جيجابايت مجاناً مع تشفير من طرف إلى طرف. لا حاجة لحساب. يتم تشفير ملفاتك في متصفحك قبل الرفع — لا أحد آخر يستطيع قراءتها.

إرسال ملف