Dateiname als String prüfen, welche Funktionen?



  • Hi!

    Ich möchte aus einem String, welcher mittels POST übergebenen wurde, feststellen, ob es ein gültiger Dateiname ist. In etwa so

    if($_POST["DateiName"]==isValidFileName) {
      //Weitermachen
    } else {
      //Fehler
    }
    
    function isValidFileName($FileName) {
       //Datei darf nur Zeichen a-z, A-Z, 0-9 und umlaute enthalten,
       //ist nicht länger als 32 Zeichen,
       //Dreistellige Endung falls nicht vorhanden/nicht korrekt soll hinzugefügt werden
       //Andere für gültige Datei nötige Verifikationen, die mir gerade nicht einfallen
    }
    

    Wie mache ich das am besten?
    Welche Funktionen kann ich nutzen?

    Danke!

    MfG



  • Der Syntax im if ist müll, sollte natürlich so sein:

    if(isValidFileName($_POST["DateiName"]))
    

  • Mod

    Die erste Frage ist: wieso willst du das? Das klingt nämlich erstmal nach einer riesen Sicherheitslücke.

    Denn was ein valider Dateiname ist, ist nicht so einfach zu sagen. Du könntest zB alles ausser einem . und alphanumerische Zeichen verbieten. Das würde simpel per regex gehen.

    Aber ich bin mir ziemlich sicher, dass du das nicht wirklich tun willst. Also erklär mal lieber was du machen willst.



  • Ich möchte Daten hochladen und auf dem Server als Datei abspeichern.

    Im Moment sende ich die Daten(ByteArray) verschlüsselt zum Server und speicher sie in eine Datei ab, wobei der Dateiname halt nicht variabel ist.

    Jetzt wollte ich erst mit einer setSaveFileName.php den Dateinamen in der Session festlegen z.B. $_SESSION['SaveFileName']="Dateiname.dat" und dann die Daten, die ich später hochladen in die Datei $_SESSION['SaveFileName'] in einem vorgegebenen Ordner abspeichern.

    Für mich oder das Programm ist ein Valider Dateiname halt irgendwas was als Dateiname verwendet werden kann(Und ich denke ich beschränke mich hier auf den Deutschen Zeichensatz). Wobei die Dateiendung immer gleich sein soll.



  • Ich denke perg_match ist das was ich suche. Der Syntax verwirrt mich aber schon.
    Wie muss ich das denn schreiben damit sowas wie "Dateiname.dat" zugelasen wird. Wobei ich eben nur die vorher schon genannten Zeichen zulassen möchte(relative pfade sollen auch ungültig sein, sowas wie "..\Dateiname.dat" oder "\neuerOrdner\Dateiname.dat).


  • Mod

    PHPNewbie schrieb:

    Ich möchte Daten hochladen und auf dem Server als Datei abspeichern.

    Dann erstellst du einen eigenen Namen für die Datei, zB der md5 hash oder ähnliches und speicherst sie in ein nicht öffentlich zugängliches Verzeichnis und schreibst den original Namen in die Datenbank.

    Der Download läuft dann über eine php Datei (die aus Performance Gründen zB XSendFile verwenden kann) und den Dateinamen wieder im Header zurück gibt.

    Nie nie nie eine Datei einfach so wie sie der User hochgeladen hat auf den Server speichern.


Log in to reply