ユーザーがフリーテキストとしてファイル名を入力し、保存ボタンをクリックする、フリーテキストエントリを含む名前を付けて保存ダイアログを検討してください。次に、ソフトウェアはファイル名を検証し、名前が有効な場合はファイルを保存します。
Unixファイルシステムでは、次のような検証でどのルールを適用する必要がありますか。
それで基本的に、Unixファイル名から制限されるべき文字のminimumセットは何ですか?
最小はスラッシュ( '/')およびNULL( '\ 0')です
多くの場合忘れられます:コロン(:)は、$ PATHのようなもの、つまり実行可能ファイルが「自動的に」見つかるディレクトリのリストで一般的に使用されるため、良いアイデアではありません。これは、DOS/Windowsディレクトリ名との混乱を引き起こす可能性があります。もちろん、ドライブ名にはコロンが使用されます。
受け入れられた答えには真実があるかもしれませんが、スクリプトや他のものに迷惑をかける可能性のある制限を設けることには利点があると思います。
(-スペースを追加するのは嫌ですが、多分スペース。)
ご覧のように、@ Gavinが示唆しているように、ホワイトリストの方がいいかもしれません...
ドット(.
)ファイルとフォルダーを非表示にするために最初に...それ以外の場合は、* NIX名前規則(Wikipediaから)に従います。
ほとんどのUNIXファイルシステム
/
、null
。Bombe が回答で指摘しているように、ユーザー入力を制限することは、まったく面倒ではないにしても、少なくともイライラさせられます。ただし、開発者として、コードとのすべての対話は悪意があると想定し、そのように扱う必要があります。
特定の文字をホワイトリストまたはブラックリストに登録するのではなく、実際のアプリケーションで両方の問題を解決するには、ファイル名としてユーザー入力を使用しないでください。
代わりに、安全な名前(hex chars [a-f0-9]
独自の工夫の究極の安全性のみ)、ユーザー入力からのencoded( PHPのbin2hex )、またはランダムに生成されたID(例: PHPのuniqid )は、何らかの方法でユーザー入力にマッピングされます(選択してください)。
エンコード/デコードは、マッピングに依存せずにオンザフライで実行できるため、実際には理想的です。ユーザーは、ファイルが何であるかを知る必要はありません本当に呼び出されました。ファイルを取得/設定できる限り、そしてそれがappears必要なものと呼ばれる限り、誰もが勝者です。
この方法論により、ユーザーは自分のファイルを好きなように呼び出すことができます。ハッカーだけがpeopleイライラし、ファイルシステムはあなたを愛します:-)