web-dev-qa-db-ja.com

ファイル名の改行

私は防御的であるという前提を理解し、受け入れます1 シェルスクリプトは賢明であり、長期的にはより持続可能です。

ここでのテキスト処理に関する質問への回答の多くは、この原則に従っており、正統でないファイル名の不測の事態に対応しています。スペース、ダッシュ、改行が含まれる場合があります。

ファイル名の改行はどのくらい普及していますか?具体的には:

  • デフォルトで改行を含むファイル名を作成するアプリケーションはありますか?
  • そのようなファイル名を作成することが望ましい状況はありますか?
  • または、主にユーザーエラーのインスタンスですか?

[1]可能な限り幅広いシナリオと不測の事態の計画と管理の意味...

この質問 に関する(かなり平凡な)コメントに触発された質問。

24
jasonwryan

ファイル名を操作するアプリケーションをテストするために意図的に作成されたもの以外の改行を含むファイル名を見たことがありません。改行を含むファイル名は、次の理由で表示されます。

  • いくつかのバグまたはユーザーエラー(不適切なコピーと貼り付けなど)により、意図しないファイル名が発生しました。
  • 一部のファイルシステムの破損がファイル名に影響を与えました。
  • 誰かが意図的に「奇妙な」ファイル名を作成して、セキュリティホールを悪用しました。この場合、アプリケーションは渡されたファイル名を本来よりも信頼します。

POSIXは filename を「ファイルの名前に使用される1から{NAME_MAX}バイトで構成される名前として定義します。名前を構成する文字は、スラッシュ文字とnullバイトを除くすべての文字値のセットから選択できます。ファイル名のドットとドットドットには特別な意味があります。」すべてのファイルシステムが「奇妙な」ファイル名を受け入れる保証はありません(唯一の 保証 文字は ASCII文字、数字、ピリオド、ハイフン、アンダースコア 、つまりA-Za-z0-9および._-、ハイフンは最初の位置で禁止されています)が、最近のuniceのほとんどのネイティブファイルシステムでは禁止されています。

論文を書くとき、PDFファイルの参考文献をさまざまなソースから収集することがよくあります。これらのすべてに正しいメタデータが含まれているわけではありません。つまり、=から論文のタイトルをコピーして貼り付けることがありますPDFビューアをファイル名に挿入します。これにより、ファイル名に改行が含まれることがよくありますが、これまで使用したツールで問題が発生することはありません。

私見標準へのコーディングについて「防御的」なものは何もありません。ファイル名で改行が許可されていることを示す標準。スクリプトが標準で許可されているすべてのファイル名を処理しない場合、スクリプトは壊れています。

23
sml

NORMALユーザーがファイル名に改行を使用するのを見たことがありません。その主な目的は、(1)攻撃者がシステムを破壊しやすくすること、および(2)安全なプログラムを作成することを困難にすることであると思われます。なので、攻撃に抵抗するプログラムが必要な場合は、それらの準備をする必要があります。

"シェルでのファイル名とパス名:正しく実行する方法" は、これを正しく処理する方法を示しています。

2
user45404