web-dev-qa-db-ja.com

Unixファイル名から制限される文字は何ですか?

ユーザーがフリーテキストとしてファイル名を入力し、保存ボタンをクリックする、フリーテキストエントリを含む名前を付けて保存ダイアログを検討してください。次に、ソフトウェアはファイル名を検証し、名前が有効な場合はファイルを保存します。

Unixファイルシステムでは、次のような検証でどのルールを適用する必要がありますか。

  • 名前は、特殊文字のエスケープなどの点で後で操作するのが難しくありません。
  • 規則はそれほど限定的ではないため、ファイルの保存はユーザーフレンドリーではありません。

それで基本的に、Unixファイル名から制限されるべき文字のminimumセットは何ですか?

61
barrymc

最小はスラッシュ( '/')およびNULL( '\ 0')です

52
mouviciel

まず、説明しているのは ブラックリスト です。より良いオプションは ホワイトリスト キャラクターです。これは(ユーザーの観点から)キャラクターを取り去るよりも挿入する方が簡単だからです。

UNIX環境で何が良いかという点では:

  • aZ
  • AZ
  • 0-9
  • アンダースコア(_
  • ダッシュ(-
  • ピリオド(.

基本をカバーする必要があります。スペースは大丈夫ですが、物事を難しくします。 Windowsユーザーはそれらを愛していますが、unix/linuxは好きではありません。したがって、ターゲットオーディエンスに応じて適宜選択してください。

32
Gavin Miller

多くの場合忘れられます:コロン(:)は、$ PATHのようなもの、つまり実行可能ファイルが「自動的に」見つかるディレクトリのリストで一般的に使用されるため、良いアイデアではありません。これは、DOS/Windowsディレクトリ名との混乱を引き起こす可能性があります。もちろん、ドライブ名にはコロンが使用されます。

18
unwind

受け入れられた答えには真実があるかもしれませんが、スクリプトや他のものに迷惑をかける可能性のある制限を設けることには利点があると思います。

  • スラッシュ(/)
  • バックスラッシュ(\)
  • NULL(\ 0)
  • ティック( `)
  • ダッシュ(-)で始まる
  • 星 (*)
  • パイプ(|)
  • セミコロン(;)
  • 引用符( "または ')
  • コロン(:)

(-スペースを追加するのは嫌ですが、多分スペース。)

ご覧のように、@ Gavinが示唆しているように、ホワイトリストの方がいいかもしれません...

13
ThinkBonobo

ドット(.)ファイルとフォルダーを非表示にするために最初に...それ以外の場合は、* NIX名前規則(Wikipediaから)に従います。

ほとんどのUNIXファイルシステム

  • ケース処理:大文字と小文字を区別する大文字と小文字の区別
  • 許可される文字セット:any。
  • 予約文字:/null
  • 最大長:255。
  • 注:リーディング。 lsおよびファイルマネージャがデフォルトでファイルを表示しないことを示します

ファイル名に関するウィキペディアの記事へのリンク

10
Tobias Wärre

FTWのエンコード

Bombe が回答で指摘しているように、ユーザー入力を制限することは、まったく面倒ではないにしても、少なくともイライラさせられます。ただし、開発者として、コードとのすべての対話は悪意があると想定し、そのように扱う必要があります。

特定の文字をホワイトリストまたはブラックリストに登録するのではなく、実際のアプリケーションで両方の問題を解決するには、ファイル名としてユーザー入力を使用しないでください。

代わりに、安全な名前(hex chars [a-f0-9]独自の工夫の究極の安全性のみ)、ユーザー入力からのencodedPHPのbin2hex )、またはランダムに生成されたID(例: PHPのuniqid )は、何らかの方法でユーザー入力にマッピングされます(選択してください)。

エンコード/デコードは、マッピングに依存せずにオンザフライで実行できるため、実際には理想的です。ユーザーは、ファイルが何であるかを知る必要はありません本当に呼び出されました。ファイルを取得/設定できる限り、そしてそれがappears必要なものと呼ばれる限り、誰もが勝者です。

この方法論により、ユーザーは自分のファイルを好きなように呼び出すことができます。ハッカーだけがpeopleイライラし、ファイルシステムはあなたを愛します:-)

7
Fred Gandt