ファイルパス名の正規化はシステムによって異なる。Windows/Linuxの場合は積極的にUnicode正規化を行わずNFC正規化を利用する。macOSの場合、積極的にNFD正規化を行う。
パス名の正規化方法が異なるため、macOSからパス名を取得した場合、適切な正規化を行わないとWindow/Linux上でファイルで同じファイル名のファイルができてしまう。
NFC変換なしのパス名生成
// masosのNFSボリュームからのファイル名取得 $files = glob('/macos/nfs/volume/*'); // $filesを利用するとNFDの文字列を利用することになる
NFDの文字列をNFCに正規化する
// masosのNFSボリュームからのファイル名取得 $files = glob('/macos/nfs/volume/*'); // NFDをNFCに正規化 $normalized = array_may(function($f) { return Normalizer::normalize($f, Normalizer::FORM_C); }, $files); // $normalizedを利用する
NFDで正規化されていることが保証されている場合、正規化処理を省略できる。
[ルール/推奨事項のリスク評価]
[評価例 - 英語表記に統一]
| Rule | Severity | Likelihood | Remediation Cost | Priority | Level |
|---|---|---|---|---|---|
| IDS05-J | medium | unlikely | medium | P4 | L3 |