تمت إضافة ميزة التحميلات الآمنة في إصدار Discourse 2.4 الصادر في فبراير، وهي توفر درجة أعلى من الأمان لجميع الملفات المرفوعة (صور، فيديو، صوت، نصوص، ملفات PDF، ملفات مضغوطة، وغيرها) ضمن مثيل Discourse.
المتطلبات الأساسية
يجب أن يكون لديك تحميلات S3 مفعلة في موقعك، وهو ما يتطلب تعبئة الإعدادات التالية:
- معرف مفتاح الوصول S3
- المفتاح السري للوصول S3
- منطقة S3
- سلة رفع S3
كما يجب أن تستخدم سلة S3 لا تحتوي على سياسة سلة عامة، وتحتاج إلى التأكد من أن جميع الملفات المرفوعة مسبقًا تحتوي على قائمة تحكم في الوصول (ACL) عامة للقراءة (public-read) في S3. راجع قسم “تفعيل التحميلات الآمنة” أدناه.
بعد استيفاء هذه المتطلبات الأساسية، يمكنك تفعيل إعداد الموقع “التحميلات الآمنة”.
تفعيل التحميلات الآمنة
هنا تنبثق التنانين
![]()
هذه ميزة متقدمة، والدعم خارج مستوى المؤسسة لدينا سيكون محدودًا للغاية. قم بتفعيل التحميلات الآمنة فقط إذا كنت مستخدمًا خبيرًا.
لتفعيل التحميلات الآمنة، يجب عليك اتباع الخطوات التالية:
- تأكد من إعداد تحميلات S3.
- احفظ ما إذا كانت سلة S3 الخاصة بك تحتوي على سياسة سلة عامة. إذا كانت كذلك، فهناك خطوة إضافية مطلوبة (الخطوة 4).
- قم بتشغيل مهمة
uploads:sync_s3_aclsباستخدام Rake. سيضمن ذلك أن جميع ملفاتك المرفوعة تحتوي على قائمة تحكم في الوصول (ACL) الصحيحة في S3. هذا مهم؛ فإذا قمت بالخطوة 4 قبل هذه الخطوة، قد تصبح بعض الملفات غير قابلة للوصول في منتداك. - احذف سياسة السلة العامة من سلتك إذا كانت موجودة في الخطوة 1.
- قم بتفعيل إعداد الموقع “التحميلات الآمنة”. يمكنك أيضًا تفعيل إعداد الموقع “منع المستخدمين المجهولين من تنزيل الملفات” لمنع المستخدمين المجهولين من تنزيل المرفقات من المنشورات العامة. قد يتم تصنيف أي ملفات مرفوعة من هذه اللحظة فصاعدًا على أنها آمنة اعتمادًا على الشروط أدناه.
- إذا كنت ترغب في تحليل جميع الملفات المرفوعة سابقًا وتصنيفها كآمنة محتملة، قم بتشغيل مهمة
uploads:secure_upload_analyse_and_updateباستخدام Rake.
ملاحظة حول سياسة سلة S3 
يجب عليك التأكد من أن السلة التي تقوم برفع الملفات إليها لا تحتوي على سياسة سلة عامة. ستكون السياسة العامة للسلة مشابهة لهذا:
{
"Version": "2012-10-17",
"Id": "ComputedBucketPolicy",
"Statement": [
{
"Sid": "AllowWorldRead",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::your-bucket-name/*"
}
]
}
الجزء المهم هنا هو أننا نسمح لـ * (الجميع) بالحصول على الكائنات (GetObject)، مما يعني السماح لأي شخص بتنزيل أي شيء في السلة. ستظهر هذه التسمية أيضًا ما إذا كانت السياسة عامة:
لا يجب ألا يتم تعديل الإعدادات هنا. الصورة أدناه تمثل الحالة المثالية لعلامة “حظر الوصول العام”:
ما الذي تفعله
بمجرد تفعيل التحميلات الآمنة، سيتم تصنيف أي ملف يتم رفعه عبر المصنف (Composer) على أنه آمن أو غير آمن بناءً على المعايير التالية:
- إذا كان إعداد الموقع “مطلوب تسجيل الدخول” مفعلاً، فسيتم تصنيف جميع الملفات المرفوعة على أنها آمنة، ولن يتمكن المستخدمون المجهولون من الوصول إليها.
- إذا قمت برفع شيء ما داخل رسالة شخصية، فسيتم تصنيفه على أنه آمن.
- إذا قمت برفع شيء ما داخل موضوع موجود داخل فئة خاصة، فسيتم تصنيفه على أنه آمن.
سيكون الملف المرفوع في S3 لديه قائمة تحكم في الوصول (ACL) خاصة، لذا فإن الروابط المباشرة إلى الملف في S3 ستؤدي إلى خطأ 403 (مرفوض). سيتم الوصول إلى أي من التحميلات الآمنة جميعًا عبر عنوان URL موقع سلفي (presigned URL) في S3. ومع ذلك، سيظل هذا مخفيًا عن مستخدميك؛ فإذا كان الرفع آمنًا، سيتم أي مرجع إليه عبر عنوان URL /secure-uploads/ الخاص بـ Discourse.
الأذونات والتحكم في الوصول
سيحدد عنوان URL /secure-uploads/ ما إذا كان المستخدم الحالي مسموحًا له بالوصول إلى الوسائط وخدمتها إذا كان مسموحًا بذلك. عند إنشاء الرفع، سيتم تعيين المنشور الذي ظهر فيه لأول مرة على أنه “منشور التحكم في الوصول”، وستكون جميع الأذونات مبنية على ذلك المنشور.
- إذا كان إعداد الموقع “مطلوب تسجيل الدخول” مفعلاً، فسيحصل المستخدمون المجهولون دائمًا على خطأ 404 عند محاولة الوصول إلى العنوان.
- عند الوصول إلى وسائط يكون منشور التحكم في الوصول لها رسالة شخصية، يجب أن يكون المستخدم جزءًا من موضوع الرسالة الشخصية هذه للوصول إلى الوسائط، وإلا سيحصل المستخدم على خطأ 403.
- عند الوصول إلى وسائط يكون منشور التحكم في الوصول لها داخل موضوع موجود داخل فئة خاصة، يجب أن يكون لدى المستخدم حق الوصول إلى تلك الفئة للوصول إلى الوسائط، وإلا سيحصل المستخدم على خطأ 403.
نسخ عناوين URL /secure-uploads/ ونقلها بين المنشورات والمواضيع أمر غير حكيم، حيث سيكون للمستخدمين المختلفين مستويات وصول مختلفة داخل منتديات Discourse الخاصة بك. يجب دائمًا إنشاء التحميلات الجديدة عبر المصنف (Composer). ستحترم الصور المضمنة (Oneboxes) والصور المرتبطة مباشرة (hotlinked) أيضًا قواعد التحميلات الآمنة. لا تتأثر التحميلات الخاصة بالإعدادات، والرموز التعبيرية (emojis)، وتحميل السمات (theme uploads) بـ التحميلات الآمنة، حيث يجب أن تكون عامة.
إذا تم حذف منشور التحكم في الوصول، فلن يكون الرفع المرفق قادرًا على الوصول إليه بعد الآن. ![]()
نقل المنشورات التي تحتوي على تحميلات آمنة
إذا قمت بنقل “منشور تحكم في الوصول” بين سياقات أمنية مختلفة، فقد يتغير الرفع المرفق ليصبح آمنًا أو غير آمن. هذه هي الحالات التي قد تغير أمان الرفع:
- تغيير فئة الموضوع. سيعيد فحص جميع المنشورات في الموضوع ويحدث حالة أمان الرفع وفقًا لذلك.
- تغيير الموضوع بين كونه موضوعًا عامًا أو رسالة شخصية. سيفعل نفس الشيء كما هو موضح أعلاه.
- نقل المنشورات من موضوع إلى موضوع آخر جديد أو موجود. سيعمل بنفس الطريقة المذكورة أعلاه على الموضوع المستهدف.
التحميلات الآمنة في رسائل البريد الإلكتروني
تم تمكين تضمين الصور الآمنة في رسائل البريد الإلكتروني افتراضيًا. يمكنك تكوين إعدادات الموقع هذه لمزيد من التحكم:
secure_uploads_allow_embed_images_in_emails: قم بتعطيل هذا لإخفاء الصور الآمنة في رسائل البريد الإلكتروني.secure_uploads_max_email_embed_image_size_kb: الحد الأقصى لحجم الصورة الآمنة التي سنقوم بتضمينها، الافتراضي 1 ميجابايت، حتى لا تصبح رسالة البريد الإلكتروني كبيرة جدًا. الحد الأقصى هو 10 ميجابايت. يعمل بالتزامن معemail_total_attachment_size_limit_kb.
سيتم إضافة الصور الآمنة كمرفقات للبريد الإلكتروني وتضمينها باستخدام تنسيق عنوان URL cid: لأن دعم عناوين URL base64 في عملاء البريد الإلكتروني لا يزال غير مستقر.
إذا لم يكن لديك secure_uploads_allow_embed_images_in_emails مفعلاً، أو إذا بدأت الصور في تجاوز حدود الحجم، فستظهر لك هذه الرسالة بدلاً من الصور الآمنة (كما هو الحال مع الصوت والفيديو الآمنين غير المضمنين):
![]()
العملاء المستضافون
في الوقت الحالي، تتوفر التحميلات الآمنة لعملاء خطة المؤسسة فقط. يرجى التواصل معنا لمزيد من التفاصيل.


ADVANCED thing, not for the faint of
, and there is a limit to how much we will support it outside our enterprise tier. Bring your own expertise…
