Stellen Sie sich ein Dialogfeld Speichern unter mit einem Freitexteintrag vor, in dem der Benutzer einen Dateinamen als Freitext eingibt und dann auf die Schaltfläche Speichern klickt . Die Software überprüft dann den Dateinamen und speichert die Datei, wenn der Name gültig ist.
Welche Regeln sollten auf einem Unix-Dateisystem bei der Validierung angewendet werden, sodass:
- Der Name wird später nicht schwer zu manipulieren sein, um Sonderzeichen usw. zu entkommen.
- Die Regeln sind nicht so restriktiv, dass das Speichern einer Datei nicht mehr benutzerfreundlich ist.
Was ist also im Grunde die Mindestanzahl von Zeichen, die von einem Unix-Dateinamen eingeschränkt werden sollten?
validation
unix
file
barrymc
quelle
quelle
Erstens beschreiben Sie eine schwarze Liste . Ihre bessere Option ist es, Ihre Zeichen auf eine weiße Liste zu setzen , da es (aus Benutzersicht) einfacher ist, Zeichen einzufügen, als sie wegzunehmen.
In Bezug auf das, was in einer Unix-Umgebung gut wäre:
_
)-
).
)Sollte Ihre Grundlagen abdecken. Räume können in Ordnung sein, machen es aber schwierig. Windows-Benutzer lieben sie, Unix / Linux nicht. Wählen Sie also je nach Zielgruppe entsprechend.
quelle
Obwohl die akzeptierte Antwort die Wahrheit haben könnte, denke ich, dass es einen Vorteil hat, einige Einschränkungen zu haben, die für Skripte oder andere Dinge möglicherweise ärgerlich sein könnten:
(- vielleicht Platz, obwohl ich das nur ungern hinzufügen möchte.)
Wie Sie sehen können, sind Sie vielleicht besser dran, wenn Sie auf der Whitelist stehen, wie @Gavin vorschlägt ...
quelle
Oft vergessen: Der Doppelpunkt (:) ist keine gute Idee, da er häufig in Dingen wie $ PATH verwendet wird, dh in der Liste der Verzeichnisse, in denen ausführbare Dateien "automatisch" gefunden werden. Dies kann zu Verwechslungen mit DOS / Windows-Verzeichnisnamen führen, wobei der Doppelpunkt natürlich in Laufwerksnamen verwendet wird.
quelle
Vergessen Sie nicht, dass Sie
.
am Anfang einen Punkt ( ) hinzufügen können , um Dateien und Ordner auszublenden ... Andernfalls würde ich einer * NIX-Namenskonvention (aus Wikipedia) folgen:Die meisten UNIX-Dateisysteme
/
,null
.Link zum Wikipedia-Artikel über Dateinamen
quelle
FTW codieren
Wie Bombe in ihrer Antwort betont, ist die Einschränkung der Benutzereingabe zumindest frustrierend, wenn nicht geradezu ärgerlich. Als Entwickler sollten wir jedoch davon ausgehen, dass jede Interaktion mit unserem Code böswillig ist, und sie als solche behandeln.
Um beide Probleme in einer praktischen Anwendung zu lösen, anstatt bestimmte Zeichen in Weiß oder Schwarz aufzulisten, sollten wir die Benutzereingabe einfach nicht als Dateinamen verwenden.
Verwenden Sie stattdessen einen sicheren Namen (hex Zeichen
[a-f0-9]
nur für ein Höchstmaß an Sicherheit) unserer eigenen Planens, entweder verschlüsselt von der Benutzereingabe (zB PHP bin2hex ) oder eine zufällig generierte ID (zB PHP uniqid ), die dann durch eine Methode zugeordnet wird (take Ihre Wahl) zur Benutzereingabe.Das Codieren / Decodieren kann im laufenden Betrieb ohne Abhängigkeit vom Mapping erfolgen und ist daher praktisch ideal. Der Benutzer muss nie wissen, wie die Datei wirklich heißt. solange sie erhalten / stellen Sie die Datei, und es scheint , genannt zu werden , was sie wollten, ist jeder ein Gewinner.
Mit dieser Methode kann der Benutzer seine Datei aufrufen, wie er möchte, Hacker sind die einzigen , die frustriert sind, und Ihr Dateisystem wird Sie lieben :-)
quelle
name
anstatt zu versuchen, sie zu erzwingenfirst
undlast
getrennt (was mich dazu bringt so wütend macht ). Oder wenn ich laufe in irgendwelche Beschränkungen für Passwörter andere als Mindestlänge. ("Keine Leerzeichen erlaubt?!? Aus welchem irdischen Grund!?") Offensichtlich ist dies in einigen Situationen angemessener als in anderen. Manchmal müssen Sie den Benutzer aus absolut gültigen Gründen den tatsächlichen Dateinamen angeben lassen.Lassen Sie den Benutzer einen beliebigen Namen eingeben. Eine künstliche Einschränkung des Zeichenbereichs stört die Benutzer nur und dient keinem wirklichen Zweck.
quelle
The name will not be difficult to manipulate later in terms of escaping special characters, etc.
. Die Menschen haben hier darauf hingewiesen , dass es durchaus ein paar Zeichen , die können in gültigen Dateinamen sein, aber realistisch eine Reihe von Problemen führen.