منع المجهولين من تنزيل الملفات غير المتوافقة مع CDN

لدي موقع تعود فيه ملفات mp4 برمز 404.

تم تعيين authorized_extensions على *. يتم تحميل الملف بشكل جيد. أراه في نظام الملفات. الأذونات صحيحة. file يقول إنه ملف MP4. السجل في rails يبدو جيدًا:

[1] pry(main)> u=Upload.find(196082)
=> #<Upload:0x00005601a1b56348
 id: 196082,
 user_id: 1,
 original_filename: "PXL_20220617_184736219.mp4",
 filesize: 9328093,
 width: nil,
 height: nil,
 url: "/uploads/default/original/3X/5/6/5679d94dfce852f780afa5fcb7f1a29d810cc8fc.mp4",
 created_at: Fri, 17 Jun 2022 18:53:41.130790000 UTC +00:00,
 updated_at: Fri, 17 Jun 2022 18:53:41.176664000 UTC +00:00,
 sha1: "5679d94dfce852f780afa5fcb7f1a29d810cc8fc",
 origin: nil,
 retain_hours: nil,
 extension: "mp4",
 thumbnail_width: nil,
 thumbnail_height: nil,
 etag: nil,
 secure: false,
 access_control_post_id: nil,
 original_sha1: nil,
 verification_status: 1,
 animated: nil,
 security_last_changed_at: nil,
 security_last_changed_reason: nil>

لكن الوصول إليه يعيد 404. كانت هناك ميزات جديدة قليلة وإصلاحات للأخطاء لملفات mp4 مؤخرًا، لكنني قمت للتو بالترقية ولا يزال الأمر لا يعمل. لا أعرف أين أبحث.

المشكلة هي أن إعدادات nginx تسمح فقط بأنواع ملفات معينة. نقل هذا إلى خطأ.

في discourse.conf يوجد هذا المقطع:

      # this allows us to bypass rails
      location ~* \.(gif|png|jpg|jpeg|bmp|tif|tiff|ico|webp)$ {
          add_header Access-Control-Allow-Origin *;
          try_files $uri =404;
      }

لقد أضفت mp3 و mp4 إلى أنواع الملفات (بعد webp وتعمل ملفات mp4 الآن) إلى discourse.conf داخل الحاوية. أرى “bypass rails” في discourse_docker config/nginx.sample.conf. لا أرى كيف يصل إلى القالب داخل docker، لذلك لا أعرف كيف أكتشف متى حدث هذا.

لديهم * في أنواع الملفات المسموح بها. لا أعرف ما إذا كان هناك أي سحر يسمح لملفات mp3/mp4 بالعمل إذا تم تعدادها في إعدادات الموقع، لكنني لا أرى كيف يمكن أن يكون ذلك.

ولكن يجب أن يعمل التنزيل إذا لم يتجاوز Rails أيضًا.

هناك مسار لذلك

get "uploads/:site/original/:tree:sha(.:extension)" => "uploads#show", constraints: { site: /\w+/, tree: /([a-z0-9]+\/)+/i, sha: /\h{40}/, extension: /[a-z0-9\._]+/i }

ويجب أن ترسل طريقة show الملف. سيكون إعداد nginx أكثر كفاءة فقط عن طريق تجاوز Rails، ولكن هذا ليس مطلوبًا.

أوه.. الامتدادات المصرح بها هي فقط لتفويض التحميل، وليس للتنزيلات (أي أن امتدادًا غير موجود في هذه القائمة لا ينبغي أن يمنع تنزيل ملف).

أنا غير قادر على تكرار هذا في أحدث الاختبارات التي تم تمريرها، لذا قد ترغب في إعادته إلى Support :wink:

تحرير: لقد بحثت عن الموقع ويبدو أن لديك مشاكل أخرى.

الآن عندما أقوم بتنزيل الملف باستخدام wget، فإنه يعمل.

(تحرير 2 قد يكون هذا بسبب أنك أضفت امتداد mp4 إلى إعدادات nginx؟ ومع ذلك، بالنسبة لي، إنه يعمل فقط دون الحاجة إلى إعدادات إضافية)

إعجاب واحد (1)

شكرًا لك! سألقي نظرة على ذلك أول شيء. أعتقد أنني كان يجب أن أجرب الوضع الآمن!

أنا مرتبك جدًا بسبب عامل الخدمة هذا.

ليس خطأ.

لا أزال لا أفهم رسالة عامل الخدمة هذه، لكنني قمت بإيقاف prevent_anons_from_downloading_files وهي تعمل الآن. يبدو أن إعداد “prevent_anons” غير متوافق مع شبكة توصيل المحتوى (CDN)؟

ولكن لم يتم استرداد التحميلات من شبكة توصيل المحتوى (CDN) على هذا الموقع؟ إنه يشير فقط إلى موقع على www

إعجاب واحد (1)

إذًا أنا في حيرة أكبر. أفترض أن هذه المشاركة لم تتم إعادة خبزها بعد تعريف شبكة توصيل المحتوى (CDN).

ولكن https://www.turiver.com/t/argentina-la-sociedad-perdida/117158/7909 يتم تحميله من شبكة توصيل المحتوى (CDN)، وتغيير الإعداد أصلحه.

أرى أيضًا الكثير من أخطاء 404 في وحدة التحكم، ولكنه موقع قياسي ذو حاويتين مع هذه الإضافات فقط:

          - git clone https://github.com/discourse/docker_manager.git
          - git clone https://github.com/discourse/discourse-akismet.git
          - git clone https://github.com/discourse/discourse-spoiler-alert.git
          - git clone https://github.com/discourse/discourse-chat-integration.git
          - git clone https://github.com/discourse/discourse-solved.git
          - git clone https://github.com/discourse/discourse-cakeday.git
          - git clone https://github.com/discourse/discourse-data-explorer.git
          - git clone https://github.com/discourse/discourse-checklist.git
          - git clone https://github.com/discourse/discourse-canned-replies.git
          - git clone https://github.com/discourse/discourse-chat

وأعتقد أنك تنظر إلى https://www.turiver.com/t/argentina-la-sociedad-perdida/117158/8017 والذي يتم سحبه من شبكة توصيل المحتوى (CDN) عندما أنظر، سواء كنت مسجلاً الدخول أو غير مسجل الدخول.