Parsing-content-disposition-header-Dateinamen in multipart/from-data
Laut RFC, die in multipart/form-data content-disposition-header
filename-Feld erhält als parameter HTTP-quoted string - string zwischen quites, wo
Zeichen '\' entkommen kann jede andere ascii-Zeichen.
Ist das problem, web-Browser tun es nicht.
IE6 sendet:
Content-Disposition: form-data; name="file"; filename="z:\tmp\test.txt"
Anstelle des erwarteten
Content-Disposition: form-data; name="file"; filename="z:\\tmp\\test.txt"
Sollte analysiert werden, wie z:tmptest.txt
nach Regeln statt z:\tmp\test.txt
.
Firefox, Konqueror und Chrome don 'T escape" - Zeichen zum Beispiel:
Content-Disposition: form-data; name="file"; filename=""test".txt"
Anstelle des erwarteten
Content-Disposition: form-data; name="file"; filename="\"test\".txt"
Also... wie würden Sie vorschlagen, um mit diesem Problem umzugehen?
Hat Jemand eine Idee?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es einen Grund, dass Sie brauchen, um zu analysieren, das mit dem Namen überhaupt?
Zumindest die eine Sache, die konsistent ist, dass die
filename
Teil der header endet mit einem doppelten Anführungszeichen, so brauchen Sie nur zu Lesen, in der alles, was zwischenfilename="
und die letzten"
.Dann können Sie wahrscheinlich behandeln backslash andere als
\\
,\"
oder\"
als literal backslash, es sei denn, Sie denken, es ist besonders wahrscheinlich, dass Benutzer das hochladen von Dateinamen mit den tabs in Ihnen. 🙂"
oder mit";
-- mit diesem Mangel an Konsistenz, die Sie haben, um einige Zugeständnisse zu machen, wie die sich auf die Tatsache, dass die Benutzer sich nicht setzen";
in der Mitte Ihrer Dateinamen 🙂 Alternativ, verwenden Sie ein web-framework unterstützt eine best-effort-Analyse dieses Attributs für Sie?Zwar ein Alter thread, indem die unter java-Lösung für diejenigen, die interessiert sein könnten.