Moin Moin!
Mit enctype="multipart/form-data" in einem Uploadform sendet der Browser (FF) den Part "file" unverändert:
[file Binary-Data]
-----------------------------41184676334--also weder quoted-printable noch base64. D.h., die Wahrscheinlichkeit, dass die Boundary innerhalb file erscheint, ist durchaus gegeben.
Richtig. Nur ist die Boundary zufällig ausgewürfelt, und so lange die Datei nicht zufällig alle möglichen Boundaries enthält, passiert mit hoher Wahrscheinlichkeit gar nichts.
RFC2388 sagt sogar:
4.1 Boundary
As with other multipart types, a boundary is selected that does not
occur in any of the data.
Sollte der User-Agent also feststellen, dass die hochzuladende Datei oder auch der Wert in einem Eingabefeld die Boundary enthält, müßte er neu auswürfeln.
Perls LWP::UserAgent nutzt letztlich HTTP::Message, das eine sub _boundary() hat. Die liefert ohne Argument (bzw. mit einem zu false evaluierendem Argument) einen konstanten Wert (extrem dämlicher Ansatz!), sonst würfelt es drei mal so viele Bytes aus wie im Argument angegeben, rechnet die in Base64 um und ersetzt alle Nicht-Wort-Zeichen (\W) durch ein X. Ob die Boundary zu den Inhalten paßt, wird nicht geprüft. Man verläßt sich wohl darauf, dass der Boundary-Wert zufällig genug ist, um keine Kollisionen zu verursachen.
Was der FF treibt, kannst Du Dir selbst aus den Sources popeln. MakeMultipartBoundary klingt verdächtig gut, wird in SerializeDataMultipartFormData aufgerufen -- einmalig und ohne Ansehen der Daten, genau wie bei LWP::UserAgent.
Mit LWP::UserAgent und HTTP::Request kannst Du Dir selbst einen POST-Request basteln, bei dem die Boundary in Werten und/oder File-Uploads vorkommt, den an verschiedene Server mit verschiedenen Applikationen schicken, und sehen, ob und wie es knallt.
Alexander
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".