ファイル名安全化が業務で重要になる理由
業務システムでは、ユーザーがアップロードしたファイルをサーバー側で保存したり、レポートやエクスポート結果をファイルとして出力したりする場面が非常に多いです。 このとき、ユーザーが指定したファイル名や、外部から渡された文字列をそのままファイル名として使ってしまうと、思わぬトラブルやセキュリティ事故につながります。
例えば、OSごとに使えない文字が含まれている、極端に長いファイル名で処理が失敗する、../ を含むパスでディレクトリトラバーサル攻撃になる、拡張子を偽装して危険なファイルに見えないようにされる、などです。 そこで「ファイル名安全化ユーティリティ」を用意しておくことで、どの機能からも同じルールで安全なファイル名を生成できるようになり、システム全体の安全性と安定性が高まります。
ここから、プログラミング初心者向けにステップバイステップで考えながら、実務で使えるファイル名安全化ユーティリティを解説していきます。
ステップ1:ファイル名に潜むリスクを整理する
OS依存の禁止文字とパスの混入を意識する
まず、ファイル名には次のようなリスクが潜んでいることを理解しておくと設計がしやすくなります。
Windows では \ / : * ? " < > | などがファイル名に使えません。 UNIX 系では / がパス区切りとして使われるため、ファイル名に含めるべきではありません。 ../ や絶対パスを含む文字列をそのまま使うと、意図しないディレクトリに書き込んでしまう危険があります。 極端に長いファイル名は、OSやファイルシステムの制限に引っかかる可能性があります。
このようなリスクを避けるために、「許可する文字を絞る」「パス要素を削除する」「長さを制限する」といった方針で安全化していきます。
ステップ2:許可する文字の方針を決める
英数字と一部の記号に絞るシンプルなルールを考える
初心者の方には、「何を禁止するか」よりも「何を許可するか」を決める方が分かりやすいです。 例えば、次のような方針にします。
英数字(A〜Z、a〜z、0〜9)は許可する。 ハイフン - とアンダースコア _ は許可する。 ドット . は拡張子のために許可するが、連続ドットや先頭ドットは注意する。
このように「安全だと判断しやすい文字だけ」を許可し、それ以外は置き換えたり削除したりする形にすると、実装がシンプルになります。
