2016-04-21 15 views
0

Was ist das erwartete Verhalten, wenn ein Backslash in einem Multipart-Boundary-Attribut auftritt? Der RFC (Abschnitt 5.1.1) erlaubt es nicht, aber Apache scheinen diese Anforderung zu verstehen:Backslash im Multipart-Boundary-Attribut

POST/HTTP/1.1 
Host: myhost.com 
Content-Type: multipart/form-data; boundary="\foo" 
Content-Length: 74 

--\foo 
Content-Disposition: form-data; name="bar" 

baz 
--\foo-- 

Für mich ist die Grenze von Apache interpretiert sollte „foo“, nicht „\ foo“ sein als die Backslash Escape das 'f' und die Post Variable "bar" sollte nicht gesetzt werden.

Antwort

1

Sie haben zwar recht, die Syntax in section 5.1.1 erlaubt hier nicht Backslashes. Durch RFC 822, section 3.3 haben Sie auch Recht, zu einer Präsentation von f innerhalb einer Zeichenfolge in Anführungszeichen zu erwarten.

In der Realität führen Implementierungen jedoch kaum Übersetzungen aus \"". Aufgrund der vielen Kunden mit sehr ... unique ideas auf was ist und was ist keine gültige Grenze, Peers neigen dazu, sehr zu vergeben mit dem, was sie gefüttert werden und nur die Grenze wörtlich nehmen, was ich glaube, Apache ist hier zu tun.

Also, wenn alles streng nach dem Buch geht, hier das erwartete Verhalten war:

  • lassen Apache die Anfrage übernimmt (aus Gründen des Arguments nimmt sie an, Apache es selbst wurde Verarbeitung, die nur selten ist geschieht mit POST Anfragen),
  • die Metadaten parsen,
  • feststellen, dass, dass der Inhalt von \foo begrenzt, aus mehreren Teilen besteht,
  • schließen daraus, dass das Trennzeichen in dem Nachrichtenkörpersein muss,,
  • realize sagte Begrenzer nie erscheint tatsächlich in den Körper, und
  • produzieren einen 400/Bad Request Statuscode als der Nachrichtentext
  • beschädigt zu sein scheint
+0

ich das Gefühl Apache hatte, war sehr freizügig, Nginx hat die gleiche tatsächlich. Ich verstehe deinen Standpunkt, aber das ist ein überraschendes Verhalten und ich frage mich wirklich, ob Apache es wollte oder ob es nur ein Fehler ist. Trotzdem danke. –

+0

@JeffBencteux Nun, MIME ist ziemlich alt und die Implementierungen variieren stark. Ich vermute auch, dass die meisten Implementierer sich nicht darum kümmern, die RFCs sorgfältig zu lesen, daher müssen MIME-Parser ziemlich liberal mit ihren Eingaben umgehen. Wenn Sie interessiert sind, lesen Sie [diesen Blog-Beitrag] (http://jeffreystedfast.blogspot.com/2013/08/why-decoding-rfc2047-encoded-headers-is.html) über die Herausforderungen bei der Dekodierung von Headern und [dies rant] (http://jeffreystedfast.blogspot.com/2013/09/time-for-rant-on-mime-parsers.html) auf Parsern. – DaSourcerer