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

最初のファイルは通常の二重引用符を使用しており、非常に悪影響を及ぼします。2 番目のファイルはカール引用符を使用しており、これらが破損します。

以下のフォーラムトピックをご覧ください:

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

最初のケースは特に懸念されます。ファイル名が拡張子を含めて完全に破損しているためです。引用符がどのように処理されているか不明であるため、潜在的なセキュリティ上の問題も考えられます。

2 番目のケースは UTF 変換の問題のようです。

これは Discourse(私のサーバーは 2.3.2 版)または Safari でのリグレッションではないかと推測されます。以前からこのような問題が発生していたはずですが、明確に引用符を含むマクロ名を持つ古いケースは見つかりませんでした。非 ASCII 文字を含む古いファイルも確かに存在します(例:こちら)が、以前はこれらが動作しないことを確認したことはありませんでした。

Chrome では動作し、Safari では動作しないのは特に奇妙です。おそらく、これはクライアント側のコードに関する何らかの問題でしょう。

「いいね!」 3

最新バージョンの Firefox でファイルをアップロードおよびダウンロードする際、この問題をローカルで再現できます。Safari もクォート記号でダウンロード名を切り捨てます。Chrome はファイル名内のクォート記号をアンダースコアに置き換えるなど、異なる方法で処理しているようです。

「いいね!」 3

@gerhard 見ていただけますか?

「いいね!」 2

send_file は現在、Rails の Content-Disposition ヘッダーで filename* パラメータを使用しません。そのため、ほとんどのブラウザでファイル名が破損して表示されます。

Rails 6 でこの問題は修正されます:Encode Content-Disposition filenames on send_data and send_file · rails/rails@890485c · GitHub

当面はモンキーパッチを適用すべきでしょうか?また、S3 ストアも filename* を設定する必要があるようです。

「いいね!」 2

おそらく、Rails 6 に対応するのはいつになるか不明です。

はい、お願いします。このコードはすでに1年前のもののようなので、かなり安全だと思われます(ただし、バグ修正がないか確認してください)。

「いいね!」 3

修正をコミットしました。tests-passed ブランチにアップグレードまたは切り替えてお試しください。

「いいね!」 3