ja:rule:fle:正規化ファイルパスを利用する
This is an old revision of the document!
正規化ファイルパスを利用する
ファイルパス名の正規化はシステムによって異なる。Windows/Linuxの場合は積極的にUnicode正規化を行わずNFC正規化を利用する。macOSの場合、積極的にNFD正規化を行う。
パス名の正規化方法が異なるため、macOSからパス名を取得した場合、適切な正規化を行わないとWindow/Linux上でファイルで同じファイル名のファイルができてしまう。
例: NFCは濁音・半濁音の文字を一文字で表し、NFDを2文字で表します。このため、NFCとNFD正規化のパス名が利用されると、「ガードレール」などの文字列は見た目は同じだが、NFCとNFの異なる文字列として保存される。
非適合コード例
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 |
関連ガイドライン
参考文献
ja/rule/fle/正規化ファイルパスを利用する.1509001793.txt.gz · Last modified: 2017/10/26 07:09 by yohgaki
