مشاكل في رفع الملفات ذات الأسماء المعقدة في Safari

يبدو أن هناك مشكلة في الملفات المرفوعة على متصفح Safari عندما تتضمن أسماء الملفات علامات اقتباس (وهو أمر سيء بشكل خاص) أو أحرفًا غير ASCII. أسماء الملفات المعنية هي:

Create New "Open File" Macro and Copy Macro URL 1.1.kmmacros
Create New “Open File” Macro and Copy Macro URL 1.1.kmmacros

الأول يحتوي على علامات اقتباس عادية ويتصرف بشكل سيء للغاية، بينما يحتوي الثاني على علامات اقتباس منحنية ويتم تشويهها.

راجع موضوع المنتدى التالي:

https://forum.keyboardmaestro.com/t/testing-forum-upload-with-quotes/14504

في Chrome/Mac، يتم تنزيل كلا الملفين بشكل طبيعي كالتالي:

Create New _Open File_ Macro and Copy Macro URL 1.1.kmmacros
Create New “Open File” Macro and Copy Macro URL 1.1.kmmacros

تم استبدال علامات الاقتباس المزدوجة في الملف الأول بعلامات سفلية، لكن هذا مقبول، على الأرجح كخيار متعمد في مكان ما.

ومع ذلك، في Safari، يتم تنزيل الملفات كالتالي:

Create New .dms
Create New “Open File” Macro and Copy Macro URL 1.1.kmmacros

الأول مقلق بشكل خاص، حيث تم تشويه اسم الملف بالكامل، بما في ذلك الامتداد. قد تكون هناك آثار أمنية محتملة لهذا الأمر، فمن يدري كيف تتم معالجة علامات الاقتباس.

يبدو أن الثاني مشكلة في تحويل UTF.

أشك في أن هذا تراجع، إما في Discourse (خادمي يعمل بالإصدار 2.3.2) أو في Safari، لأنني أعتقد أننا كنا سنلاحظ ذلك سابقًا، لكنني لم أتمكن من العثور على أي حالات قديمة محددة حيث كانت الماكرو تحتوي بوضوح على علامات اقتباس في أسماءها للتحقق. هناك بالتأكيد ملفات أقدم تحتوي على أحرف غير ASCII (على سبيل المثال هنا)، ولم ألاحظ أبدًا أنها لا تعمل من قبل.

من الغريب بشكل خاص أن الأمر يعمل في Chrome ولا يعمل في Safari، لذا يُفترض أن هذه مشكلة في كود جانب العميل من نوع ما.

3 إعجابات

أستطيع إعادة إنتاج هذه المشكلة محليًا على أحدث إصدار أثناء تحميل وتنزيل ملف عبر Firefox. كما يقوم Safari بقص اسم التنزيل عند علامات الاقتباس. يجب أن تتعامل Chrome مع علامات الاقتباس في أسماء الملفات بطريقة مختلفة عن طريق استبدالها بعلامات سفلية.

3 إعجابات

@gerhard هل يمكنك إلقاء نظرة؟

إعجابَين (2)

send_file من Rails لا يستخدم حاليًا المعامل filename* في رأس Content-Disposition. وهذا هو السبب في تشوه أسماء الملفات في معظم المتصفحات.

ستقوم Rails 6 بإصلاح ذلك: Encode Content-Disposition filenames on send_data and send_file · rails/rails@890485c · GitHub

هل يجب أن أقوم بتطبيق رقعة مؤقتة (monkey patch) حتى الآن؟ ويبدو أن مخزن S3 يجب أن يحدد filename* أيضًا.

إعجابَين (2)

ربما، لست متأكداً متى سننتقل إلى Rails 6؟

نعم، من فضلك. يبدو أن هذا الكود قديم منذ عام واحد بالفعل، لذا يجب أن يكون آمنًا إلى حد كبير (تأكد من البحث عن إصلاحات الأخطاء على أي حال).

3 إعجابات

لقد قمت للتو بإرسال إصلاح. يمكنك تجربته عن طريق الترقية أو التبديل إلى الفرع tests-passed.

3 إعجابات