Die Sicherheits- und Rechtmäßigkeit der Dateinamen ist bei der Bearbeitung von Dateien -Uploads oder Dateioperationen sehr wichtig. Illegale Dateinamen können zu Systemfehlern, Sicherheitslücken und sogar zu Überschreibungsrisiken von Dateien führen. In diesem Artikel wird eine PHP-basierte benutzerdefinierte Funktion mb_scrub zur Filterung und Regulierung von Dateinamennamen eingeführt, insbesondere für Szenarien, die Multibyte-Zeichen enthalten.
Einheitliche Codierung <br> Um Multi-Byte-Zeichen (z. B. Chinesisch, Japanisch, Koreanisch usw.) korrekt zu verarbeiten, verwenden Sie zunächst MB_CONVERT_ENCODING , um die Eingangszeichenfolge in UTF-8-Codierung umzuwandeln, um eine Zeichenkürzung oder ein verstümmelter Code zu vermeiden.
Charakterfilterung <br> Durch reguläre Ausdrücke bleibt eine bestimmte Reihe von rechtlichen Charakteren erhalten. Normalerweise sind die von Dateinamen erlaubten Zeichen:
Englische Buchstaben (Kapazität)
Nummer
Unterstreichen_
Zeitraum .
Bindestrich -
Diese Zeichen erfüllen nicht nur die meisten Anforderungen an den Dateinamen, sondern vermeiden auch die Risiken, die von Sonderzeichen eingeführt werden.
Vermeiden Sie besondere Anfänge <br> Die Dateinamen beginnen mit Punkten, die normalerweise versteckte Dateien oder spezielle Systemdateien angeben. Verwenden Sie LTRIM , um die redundanten Punkte am Anfang zu entfernen, um sicherzustellen, dass versteckte Dateien nicht versehentlich erstellt werden.
Leerer Stringschutz <br> Wenn der Dateiname nach dem Filterung eine leere Zeichenfolge ist, wird automatisch ein Standarddateiname (z. B. default_filename ) zugewiesen, um nachfolgende Dateivorgänge von Fehlern zu verhindern.
Im Beispiel lautet der Dateiname illegaler Dateiname <>: "/\ |?*. TXT , der viele illegale Zeichen enthält. Nach der Verarbeitung von MB_Scrub sind nur die zulässigen Zeichen übrig. Die Beispielausgabe lautet wie folgt:
<span><span><span class="hljs-section">Original -Dateiname:Illegaler Dateiname<>:"/\|?*.txt</span></span><span>
Filtered Dateiname:txt
</span></span>
Das Beispiel hier ist relativ einfach. In den tatsächlichen Projekten können Sie den zulässigen Zeichen an Ihre Bedürfnisse anpassen oder mit zusätzlichen Regeln (z. B. Länge einschränken, Verlängerung usw.) kombinieren.
In Kombination mit der Dateierweiterungsprüfung : Während des Filterungsdateinamens sollte auch die Rechtmäßigkeit der Erweiterung separat überprüft werden, um zu verhindern, dass schädliche Skriptdateien hochgeladen werden.
Länge des Grenzdateinamens : Vermeiden Sie Probleme mit Systemkompatibilität, die durch übermäßigen Dateinamen verursacht werden.
Pfadsicherheit : Filterdateinamen können die Pfadsicherheitsüberprüfungen nicht vollständig ersetzen, um Schwachstellen wie das Verzeichnistraversal zu verhindern.
Mehrsprachige Unterstützung : MB_Scrub hat eine gute Unterstützung für Multi-Byte-Charaktere und ist für internationale Anwendungen geeignet.
Durch rationale Verwendung von Funktionen wie MB_Scrub kann die Sicherheit und Stabilität der Dateinamenverarbeitung erheblich verbessert werden und ist einer der wichtigsten Schritte im PHP -Datei -Upload oder beim Dateivorgang.