ファイル名のセキュリティと合法性は、ファイルのアップロードまたはファイル操作を処理する際に非常に重要です。違法なファイル名は、システムエラー、セキュリティの脆弱性、さらにはファイルの上書きリスクにつながる可能性があります。この記事では、特にマルチバイト文字を含むシナリオに適したファイル名文字列をフィルタリングおよび調整するためのPHPベースのカスタム関数MB_SCRUBを紹介します。
統合コーディング<br> マルチバイト文字(中国語、日本、韓国など)を正しく処理するために、最初にMB_CONVERT_ENCODINGを使用して、入力文字列をUTF-8エンコードに変換して、文字の切り捨てやガーブルコードを避けます。
文字フィルタリング<br> 定期的な表現により、特定の法律特性セットが保存されます。通常、ファイル名で許可されている文字は次のとおりです。
英語の手紙(容量)
番号
underline_
期間。
ハイフン-
これらのキャラクターは、ほとんどのファイル名の要件を満たすだけでなく、特殊文字がもたらすリスクを回避します。
特別な始まりを避けてください<br> ファイル名は、通常、非表示のファイルまたは特別なシステムファイルを示すドットから始まります。 LTRIMを使用して、最初の冗長ポイントを削除して、非表示のファイルが不注意に作成されないことを確認します。
空の文字列保護<br> フィルタリング後にファイル名が空の文字列である場合、デフォルトのファイル名( default_fileNameなど)が自動的に割り当てられ、後続のファイル操作がエラーからの操作を防ぎます。
この例では、ファイル名は違法ファイル名<>: "/\ |?*。txtです。これには多くの違法文字が含まれています。MB_SCRUB処理後、許可された文字のみが残っています。例の出力は次のとおりです。
<span><span><span class="hljs-section">元のファイル名:違法なファイル名<>:"/\|?*.txt</span></span><span>
フィルタリングされたファイル名:txt
</span></span>
ここの例は比較的簡単です。実際のプロジェクトでは、ニーズに応じて許可された文字セットを調整したり、追加のルール(制限長、拡張の制限など)と組み合わせることができます。
ファイルエクステンションチェックと組み合わせて:ファイル名のフィルタリング中、拡張機能の合法性も個別に検証して、悪意のあるスクリプトファイルがアップロードされないようにする必要があります。
ファイル名の制限長さ:過剰なファイル名によるシステム互換性の問題を避けてください。
パスセキュリティ:ファイル名のフィルタリングは、ディレクトリトラバーサルなどの脆弱性を防ぐためにパスセキュリティチェックを完全に置き換えることはできません。
多言語サポート: MB_SCRUBは、マルチバイトキャラクターを適切にサポートしており、国際的なアプリケーションに適しています。
MB_SCRUBなどの関数を合理的に使用することにより、ファイル名処理のセキュリティと安定性を大幅に改善することができ、PHPファイルのアップロードまたはファイル操作の重要な手順の1つです。